Cek Konsumsi CPU Mysql
✅ 1️⃣ Cara Paling Cepat (Production Friendly)
Gunakan Performance Schema (Summary View)
Kalau MySQL 5.7 / 8.0 biasanya sudah aktif.
Jalankan ini:
SELECT
DIGEST_TEXT,
COUNT_STAR,
ROUND(SUM_TIMER_WAIT/1000000000000,2) AS total_sec,
ROUND(AVG_TIMER_WAIT/1000000000000,4) AS avg_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
Penjelasan:
-
DIGEST_TEXT→ bentuk query -
COUNT_STAR→ berapa kali dijalankan -
total_sec→ total waktu eksekusi (indikasi konsumsi CPU) -
avg_sec→ rata-rata waktu per eksekusi
👉 Query paling atas = kandidat terbesar penyedot CPU.
✅ 2️⃣ Cek Query Yang Sedang Jalan Sekarang
Kalau CPU lagi tinggi sekarang:
SHOW FULL PROCESSLIST;
Atau lebih rapi:
SELECT *
FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep'
ORDER BY TIME DESC;
Lihat:
-
Query lama jalan
-
Status "Sending data" lama
-
Banyak query sama berjalan paralel
✅ 3️⃣ Aktifkan Slow Query Log (Kalau Belum Aktif)
Ini penting banget buat monitoring berkelanjutan.
Cek dulu:
SHOW VARIABLES LIKE 'slow_query_log';
Kalau OFF, aktifkan:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- misalnya >2 detik
Cek lokasi file:
SHOW VARIABLES LIKE 'slow_query_log_file';
Lalu analisa dengan:
mysqldumpslow /path/to/slow.log
Atau lebih bagus pakai:
pt-query-digest slow.log
(tool dari Percona 🔥 sangat powerful)
✅ 4️⃣ Cara Lebih Detail (Top CPU Consumer)
Kalau mau lihat berdasarkan total waktu eksekusi paling besar:
SELECT
SCHEMA_NAME,
DIGEST_TEXT,
COUNT_STAR,
ROUND(SUM_TIMER_WAIT/1000000000000,2) AS total_exec_time_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 5;
🎯 Cara Analisa Hasilnya
Biasanya pola yang bikin CPU tinggi:
-
❌ Query tanpa index
-
❌ SELECT * dari tabel besar
-
❌ JOIN tanpa index
-
❌ Query dipanggil ribuan kali (meskipun cepat)
-
❌ ORDER BY tanpa index
-
❌ LIKE '%keyword%' (leading wildcard)
🚀 Langkah Setelah Ketemu Query
Misalnya ketemu ini:
COUNT_STAR: 147452
total_sec: 415707.65
Artinya:
-
Query dipanggil 147 ribu kali
-
Total waktu eksekusi 415 ribu detik
-
Ini jelas heavy consumer 🔥
Selanjutnya:
EXPLAIN ANALYZE <query>;
Lihat:
-
type: ALL → full table scan ❌
-
rows: besar banget ❌
-
possible_keys: NULL ❌
Kalau mau, kirim hasil:
-
DIGEST_TEXT
-
COUNT_STAR
-
total_sec
Nanti gue bantu analisa sebagai sudut pandang Managed Service biar bisa kamu laporkan profesional ke client 👍
Kalau boleh tau bro:
MySQL versi berapa?
Running di Azure VM kan ya? CPU berapa core?
Biar gue kasih strategi optimasi yang paling tepat 🔥