Mulai MySQL versi 8 dukungan terhadap engine MyISAM mulai berkurang (dengan mulai dikuranginya fitur pada MyISAM) dan sepertinya akan dihentikan di versi berikutnya, namun demikian, engine ini masih layak untuk diperhitungkan, terutama jika kita menggunakan MySQL versi 5.7 atau versi sebelumnya.
Selain itu, MariaDB versi 10.3 juga masih mendukung penuh engine ini dan sepertinya kedepan dukungan terhadap engine ini akan terus berkembang. Dengan demikian, tidak ada salahnya jika kita mempelajari berbagai konfigurasi yang dapat kita gunakan untuk melakukan optimasi engine MyISAM.
1. key_buffer_size
Key_buffer_size merupakan konfigurasi pada engine MYISAM unuk menentukan besarnya index buffer yang dapat disimpan di memory (RAM), index buffer ini berpengaruh terhadap kecepatan membaca index. Ingat kembali bahwa MyISAM dan InnoDB berbeda dalam cara mencache data. MyISAM hanya mencache key(index) dan menyerahkan pengelolaan cache data ke OS, sedangkan InnoDB mencache semuanya baik index maupun data, sehingga proses cache data lebih dapat diandalkan.
Untuk mengetahui besarnya nilai key_buffer_size, jalankan perintah berikut:
MariaDB [(none)]> SHOW variables LIKE "%key_buffer_size%";
+-----------------------+------------+ | Variable_name | Value |
+-----------------------+------------+
| key_buffer_size | 16777216 |
+-----------------------+------------+
1 row in set (0.002 sec)
Pada contoh diatas terlihat bahwa nilai key_buffer_size adalah 16M, nilai tersebut adalah nilai default pada MariaDB
Berapa nilai yang ideal?
Untuk menentukan nilai ideal dari konfigurasi ini, cara terbaik adalah membandingkan nilai key_read_request yang merupakan total request (permintaan) untuk membaca index dan nilai key_reads yang merupakan nilai banyaknya request yang dieksekusi dengan membaca index dari hardisk dengan formula key_reads/key_read_request. Untuk mengetahui kedua nilai ini, jalankan perintah berikut:
MariaDB [(none)]> SHOW STATUS LIKE '%key_read%';
+-----------------------+--------------+
| Variable_name | Value |
+-----------------------+--------------+
| Key_read_requests | 33997631188 | | Key_reads | 28948755 |
2 rows in set (0.327 sec)
+-----------------------+--------------+
Note: Contoh diatas diambil dari website wordpress standar dengan kunjungan rata-rata 2.500 pengunjung/hari dimana nilai key_buffer_size nya telah disesuaikan menjadi 137M
Semakin kecil nilai rasio maka semakin baik, nilai maksimal yang dapat diterima adalah 1:100 (0,01), lebih rendah lebih bagus, misal 1:1000 (0,001) Pada contoh diatas, terlihat bahwa nilai rasio adalah 0,000851493 atau sekitar 1:10000 sehingga sudah optimal.
Jika kita tidak menggunakan storage engine MyISAM sama sekali maka kita dapat memberi nilai konfigurasi ini serendah mungkin, misal 64K.
2. myisam_max_sort_file_size
Konfigurasi ini mengatur ukuran maksimal temporary file yang akan digunakan ketika MySQL membuat ulang index pada engine MyISAM (seperti ketika menjalankan perintah REPAIR TABLE, ALTER TABLE, atau LOAD DATA INFILE). Jika ukuran tabel lebih besar dari nilai ini, maka index akan dibuat menggunakan key cache, yang memakan waktu lebih lama.
Nilai default untuk konfigurasi ini sudah besar yaitu 2G baik pada MySQL maupuan MariaDB
mysql> SHOW VARIABLES LIKE "%myisam_max_sort_file_size%";
| Variable_name | Value |
+-----------------------------+--------------+
| myisam_max_sort_file_size | 2146435072 |
+-----------------------------+--------------+
1 row in set (0.00 sec)
+-----------------------------+--------------+
Karena sudah besar, maka kita dapat menggunakan nilai default konfigurasi ini, tidak perlu mengubahnya.
3. myisam_sort_buffer_size
myisam_sort_buffer_size merupakan ukuran buffer yang dialokasikan ketika engine MyISAM melakukan sorting index, yaitu saat menjalankan perintah REAPAIR TABLE atau ketika membuat index (saat menjalankan perintah CREATE INDEX, ALTER TABLE)
Nilai default untuk konfigurasi ini adalah 8M pada MySQL dan 134M pada MariaDB
mysql> SHOW VARIABLES LIKE "%myisam_sort_buffer_size%";
| Variable_name | Value |
+---------------------------+-----------+
| myisam_sort_buffer_size | 8388608 |
+---------------------------+-----------+
1 row in set (0.60 sec)
+---------------------------+-----------+
Agar proses dapat optimal, kita dapat memberi nilai besar pada konfigurasi ini, misal 128M.