مجمّعُ المخزن هو حيث يحفظ InnoDB البياناتِ والفهارس في الذاكرة. فإن اتّسع لمجموعتك العاملة أُجيبت الاستعلامات من الذاكرة. وإن لم يتّسع قرأت الاستعلاماتُ نفسها القرصَ — وذلك أبطأ بمئةٍ إلى ألف ضعف للعمل نفسه.

انظر ما عندك

mysql -e "SELECT @@innodb_buffer_pool_size/1024/1024/1024 AS gb"

الافتراضُ ١٢٨ ميجابايت. وعلى خادمٍ بذاكرة ٨ جيجابايت هو الإعدادُ الذي يترك من الأداء غير المُطالَب به أكثر من أي شيءٍ آخر على الجهاز.

كم حجم بياناتك فعلًا

SELECT ROUND(SUM(data_length + index_length)/1024/1024/1024, 2) AS gb
  FROM information_schema.tables WHERE engine = 'InnoDB';

اختر الرقم

  • خادمُ قواعد بياناتٍ مخصَّص — من ٦٠ إلى ٧٠ بالمئة من الذاكرة.
  • ومشتركٌ مع PHP وخادم الويب — من ٢٥ إلى ٤٠ بالمئة، وراقب التبديل.
  • وبياناتٌ أصغر من ذلك — اجعله بحجم البيانات وزيادةً يسيرة؛ وما فوقُ هدر.
# /etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4      # one per GB, up to 8
innodb_log_file_size = 512M

افحص هل هو كبيرٌ كفاية

mysql -e "SHOW STATUS LIKE 'Innodb_buffer_pool_read%'"

اقسم القراءات التي اضطُرّت لملامسة القرص على مجموع طلبات القراءة. فما دون واحدٍ بالمئة تقريبًا صحيّ؛ وما فوقُ باستمرار يعني أن المجمّع أصغر من المجموعة العاملة.

ولا تجعل حجمه يدفع الجهاز إلى التبديل. فقاعدةُ بياناتٍ تُبدِّل أبطأ بكثير من قاعدةٍ بمجمّعٍ صغير — انظر الذاكرة والتبديل ومتى يكون التبديل عَرَضًا.
وقبل أن تشتري ذاكرةً أكثر تحقّق من أن الاستعلامات سليمة. ففهرسٌ واحد ناقص قد يُظهر المجموعة العاملة أكبر عشرَ مرّات ممّا هي — انظر متى تضيف فهرسًا.