Penyebab Utama MySQL Mengonsumsi High CPU Usage
Penggunaan CPU hingga 100% pada server database MySQL umumnya disebabkan oleh query SQL yang tidak efisien (*Slow Query*), ketiadaan indeks (*index*) pada kolom pencarian utama, atau alokasi memori InnoDB buffer pool yang kurang memadai. Hal ini mengakibatkan server harus melakukan pemindaian seluruh tabel (*Full Table Scan*) untuk setiap permintaan data.
Langkah 1: Mengaktifkan dan Menganalisis MySQL Slow Query Log
Langkah pertama adalah mendeteksi query SQL mana yang memakan waktu eksekusi paling lama. Buka file konfigurasi MySQL (/etc/mysql/my.cnf atau /etc/my.cnf):
[mysqld]\nslow_query_log = 1\nslow_query_log_file = /var/log/mysql/slow-query.log\nlong_query_time = 1 # Catat query yang dieksekusi lebih dari 1 detik\nlog_queries_not_using_indexes = 1Restart service MySQL dan analisis berkas log menggunakan perintah mysqldumpslow:
sudo systemctl restart mysql\nmysqldumpslow -s t /var/log/mysql/slow-query.log | head -n 10Langkah 2: Menggunakan Command EXPLAIN untuk Mengecek Full Table Scan
Ambil salah satu query terberat dari slow query log dan jalankan dengan klausa EXPLAIN pada MySQL client:
EXPLAIN SELECT * FROM orders WHERE status = 'pending' AND created_at >= '2026-01-01';Jika kolom type menunjukkan nilai ALL dan kolom key bernilai NULL, artinya query tersebut memaksa MySQL memindai jutaan baris data secara manual yang memicu lonjakan penggunaan CPU.
Langkah 3: Menambahkan Index Kolom MySQL yang Tepat
Tambahkan indeks gabungan (*Composite Index*) pada kolom yang sering dijadikan kondisi WHERE, JOIN, atau ORDER BY:
-- Membuat composite index pada kolom status dan created_at\nCREATE INDEX idx_orders_status_created ON orders(status, created_at);\n\n-- Verifikasi ulang dengan EXPLAIN:\nEXPLAIN SELECT * FROM orders WHERE status = 'pending' AND created_at >= '2026-01-01';Setelah indeks ditambahkan, tipe eksekusi query akan berubah dari ALL menjadi ref atau range, dan waktu eksekusi berkurang dari detik menjadi milidetik.
Langkah 4: Tuning Konfigurasi InnoDB Buffer Pool & Max Connections
Sesuaikan alokasi memori RAM server khusus untuk buffer pool MySQL pada file my.cnf agar data query tersimpan di RAM dan tidak membaca dari disk I/O:
[mysqld]\n# Alokasikan 60-70% dari total RAM server khusus DB\ninnodb_buffer_pool_size = 2G\ninnodb_buffer_pool_instances = 2\nmax_connections = 150\ntable_open_cache = 2000Simpan perubahan dan lakukan restart pada service MySQL. Beban CPU server Anda kini akan turun drastis secara signifikan.
“Indeks database yang dirancang dengan tepat dapat mempercepat respon query hingga 100x lipat dan menghemat konsumsi CPU server secara drastis.” — Tim Database Administrator AN Media Jember
Kesimpulan & Jasa Optimasi Database Server AN Media
Mengikuti **Solusi Database MySQL High CPU Usage dan Optimasi Slow Query Index** di atas akan mengembalikan stabilitas server aplikasi Anda. Jika Anda membutuhkan **Jasa Tuning Database & Optimasi Server MySQL Profesional di Jember**, hubungi tim **AN Media**.