Universitas Indonesia banyak menggunakan WordPress sebagai backend situs. Sayangnya, WordPress hanya mendukung basisdata MySQL. Untuk itu, kami memilih menggunakan MariaDB. Ada juga, sih, ingin menggunakan Percona, tetapi itu untuk kisah yang lain.
Saya mendapati bahwa akses WordPress agak lama 1 sampai beberapa detik. Dari hasil baca sana-sini, saya menemukan sepertinya masalahnya ada pada konfigurasi query cache (QCache). Oracle menyarankan QCache dimatikan saja karena tidak mendukung paralelisasi pada mesin multi-core. Bahkan, untuk Oracle versi MySQL 5.6 secara baku mematikan fasilitas ini.
Lalu bagaimana?
Menurut saya, berhubung MariaDB berada di atas ZFS yang sudah ada ZIL dan ARC/L2ARC, mengapa tidak langsung saja pertembolokan diurus oleh sistemberkas?
Akhirnya, saya pun mematikan QCache:
query_cache_size = 0 query_cache_type = OFF innodb_buffer_pool_instances = 4 innodb_buffer_pool_size = 4G
Sehingga:
MariaDB [(none)]> show global status like 'opened_tables'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Opened_tables | 62803 | +---------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> show global status like 'opened_tables'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Opened_tables | 62803 | +---------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> SHOW VARIABLES LIKE 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> SHOW STATUS LIKE 'Qcache%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Qcache_free_blocks | 0 | | Qcache_free_memory | 0 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 0 | +-------------------------+-------+ 8 rows in set (0.00 sec)
Indikator kesuksesan saya adalah tabel yang terbuka di MariaDB tidak bertambah atau bertambah dalam jumlah yang sedikit. Hasilnya, situs berjalan dengan baik dan lebih cepat.
Saya tertarik dengan mematikan double buffer pada MariaDB. Fungsi ini dapat digantikan oleh ZFS dengan mekanisme ZIL. Untuk berkas selain ZFS (EXT4) sangat tidak disarankan karena bila MySQL OOM atau mati tiba-tiba, InnoDB bisa langsung rusak. Ya, tapi, berhubung itu untuk situs yang banyak menulis ke basisdata, saya rasa belum perlu.
Bacaan Lebih Lanjut
- How do you use the Query Cache? – Master MySQL
- Why query_cache_type is disabled by default start from MySQL 5.6? - Database Administrators Stack Ex...
- Tuning MySQL: my.cnf, avoid this common pitfall!
- Avoid This When Tuning MySQL Query Cache for Performance
- Optimizing table_open_cache - MariaDB Knowledge Base
- mysql - join_buffer_size >= 4 M is not advised? - Server Fault