Secara ketat dari MySQL Point-of-View, saya punya saran tentang cara meningkatkan caching data / indeks untuk MySQL Instance.
Perlu diingat bahwa ada dua Mesin Penyimpanan utama untuk MySQL
Mekanisme caching mereka berbeda. Ada sesuatu yang dapat Anda lakukan untuk menyetel Mesin Penyimpanan pilihan Anda.
MyISAM
MyISAM hanya menyimpan halaman indeks. Tidak pernah melakukan cache data. Anda dapat melakukan dua hal untuk meningkatkan I / O untuk tabel MyISAM.
Peningkatan MyISAM # 1
Setiap tabel MyISAM yang memiliki kolom VARCHAR dapat dikonversi secara internal ke CHAR tanpa menyentuh desain awal. Misalkan Anda memiliki tabel bernama mydb.mytable dan Anda ingin meningkatkan I / O untuk itu, lakukan hal berikut di atasnya:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Ini akan meningkatkan ukuran tabel 60% -100% tetapi akan menghasilkan peningkatan kinerja 20-30% pada I / O tanpa mengubah apa pun . Saya menulis tentang ini sebelumnya di DBA StackExchange:
Peningkatan MyISAM # 2
Anda perlu meningkatkan Cache Kunci MyISAM (seperti ukuran oleh key_buffer_size ). Jalankan kueri ini, silakan:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
Ini akan menunjukkan kepada Anda key_buffer_size yang ideal berdasarkan dataset Anda saat ini.
InnoDB
InnoDB menyimpan data dan indeks. Jika Anda mengonversi semua data Anda ke InnoDB dan saat ini menjalankan WordPress dari semua basis data InnoDB, Anda perlu mengukur Pool Penyangga InnoDB Anda (seukuran dengan innodb_buffer_pool_size ). Jalankan kueri ini, silakan:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
Ini akan menunjukkan kepada Anda key_buffer_size yang ideal berdasarkan dataset Anda saat ini.
Proyeksi
Jika Anda memproyeksikan bahwa dataset Anda akan tumbuh 20 kali lebih banyak, cukup gandakan apa yang direkomendasikan oleh query ini pada 20. Misalkan dataset MyISAM Anda adalah 15MB dan 3MB adalah jumlah indeks Anda. Jika Anda memperkirakan bahwa Anda akan memiliki data 20 kali lebih banyak, atur key_buffer_size ke 60MB seperti ini di /etc/my.cnf:
[mysqld]
key_buffer_size=60M
kemudian restart MySQL. Hal yang sama berlaku untuk Pool Buffer InnoDB.
Jika semua data Anda adalah InnoDB, Anda perlu melakukan Pembersihan penuh atas infrastruktur InnoDB Anda yang saya posting di StackOverflow .