আমি এমন একটি অ্যাপ্লিকেশন নিয়ে কাজ করছি যার মধ্যে অনেকগুলি ডাটাবেস লিখেছে, প্রায় ~ 70% সন্নিবেশ এবং 30% পড়ে। এই অনুপাতের সাথে আপডেটগুলিও অন্তর্ভুক্ত থাকবে যা আমি একটি পঠিত এবং একটি লেখাকে বিবেচনা করি। সন্নিবেশ বিবৃতি মাধ্যমে একাধিক ক্লায়েন্ট নীচে সন্নিবেশ বিবৃতি মাধ্যমে ডাটাবেসে তথ্য sertোকান:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
প্রশ্নটি হল আমি হয় insert_delay ব্যবহার করা বা mysqli_mલ્ટ_query প্রক্রিয়াটি ব্যবহার করা উচিত কারণ সন্নিবেশ বিবৃতিটি সার্ভারে ~ 100% সিপিইউ ব্যবহার করে। আমি আমার ডাটাবেসে InnoDB ইঞ্জিনটি ব্যবহার করছি তাই বিলম্ব করা সন্নিবেশ সম্ভব নয়। সার্ভারে সন্নিবেশ ~ 36k / ঘন্টা এবং 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();
তাদের আউটপুট প্রদর্শন করুন।