Kolam penyangga adalah tempat InnoDB menyimpan data dan indeks di dalam memori. Kalau himpunan kerja Anda muat di sana, kueri dijawab dari memori. Kalau tidak muat, kueri yang sama membaca cakram — dan itu seratus sampai seribu kali lebih lambat untuk pekerjaan yang sama.

Lihat apa yang Anda punya

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

Nilai bawaannya 128MB. Di server dengan memori 8GB, itulah setelan yang menyia-nyiakan kinerja paling banyak dibanding apa pun di mesin itu.

Seberapa besar sebenarnya data Anda

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

Pilih angkanya

  • Server basis data khusus — 60 sampai 70% dari memori.
  • Berbagi dengan PHP dan server web — 25 sampai 40%, dan awasi tukar-halamannya.
  • Data yang lebih kecil dari itu — ukurlah sebesar datanya ditambah sedikit; lebih dari itu terbuang.
# /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

Periksa apakah ia sudah cukup besar

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

Bagilah bacaan yang terpaksa menyentuh cakram dengan seluruh permintaan baca. Di bawah kira-kira 1% itu sehat; kalau terus-menerus lebih tinggi, berarti kolamnya kekecilan untuk himpunan kerjanya.

Jangan mengukurnya sampai mesinnya jatuh ke tukar-halaman. Basis data yang bertukar-halaman jauh lebih lambat daripada basis data dengan kolam penyangga yang kecil — lihat Memori, swap, dan kapan swap itu sebuah gejala.
Sebelum membeli memori tambahan, pastikan dulu kuerinya masuk akal. Satu indeks yang hilang saja bisa membuat sebuah himpunan kerja tampak sepuluh kali lebih besar daripada sebenarnya — lihat Kapan menambahkan indeks.