मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें बहुत सारे डेटाबेस शामिल हैं, लगभग ~ 70% आवेषण और 30% रीड। इस अनुपात में वे अपडेट भी शामिल होंगे जिन्हें मैं एक पढ़ने और एक लिखने के लिए मानता हूं। डालने के बयानों के माध्यम से कई ग्राहक डेटाबेस में डेटा सम्मिलित करते हैं, नीचे दिए गए विवरण के माध्यम से:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
सवाल मैं या तो उपयोग करना चाहिए है insert_delay या उपयोग mysqli_multi_query क्योंकि डालने बयान सर्वर पर ~ 100% CPU का इस्तेमाल तंत्र। मैं अपने डेटाबेस पर InnoDB इंजन का उपयोग कर रहा हूं इसलिए विलंबित सम्मिलित करना संभव नहीं है। सर्वर पर प्रविष्टि ~ 36k / hr और 99.89% पढ़ी जाती है, मैं भी चुनिंदा कथन का उपयोग कर रहा हूं जिसमें एकल क्वेरी में डेटा को सात बार प्राप्त होता है , इस क्वेरी को निष्पादित करने के लिए सर्वर पर 150 सेकंड लगते हैं। इस कार्य के लिए मैं किस तरह की तकनीक या तंत्र का उपयोग कर सकता हूं? मेरी सर्वर मेमोरी 2 जीबी है, क्या मुझे मेमोरी का विस्तार करना चाहिए? इस समस्या पर एक नजर है, किसी भी सुझाव मुझे आभारी होंगे।
तालिका की संरचना:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(200) | NO | | NULL | |
| ad_name | varchar(200) | NO | | NULL | |
| ad_delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-----------------+--------------+------+-----+-------------------+----------------+
मेरा डेटाबेस वर्तमान स्थिति, यह 41k सम्मिलन (लिखता है) दिखाता है, जो मेरे डेटाबेस के लिए बहुत धीमा है।
SHOW FULL PROCESSLIST
जब यह 100% सीपीयू ले रहा हो? आप कितने कनेक्शन की अनुमति दे रहे हैं इस दौरान कितने ले लिए जाते हैं?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
और SELECT VERSION();
अपना आउटपुट प्रदर्शित करें।