Skip to main content

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:

  1. ❌ Query tanpa index

  2. ❌ SELECT * dari tabel besar

  3. ❌ JOIN tanpa index

  4. ❌ Query dipanggil ribuan kali (meskipun cepat)

  5. ❌ ORDER BY tanpa index

  6. ❌ 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 🔥