Cek Konsumsi CPU Mysql
Siap bro π₯
Ini gue bikinkan versi Knowledge Base (KB) / SOP Managed Service yang bisa langsung lo pakai.
π Knowledge Base
Cara Mengidentifikasi Query yang Mengkonsumsi CPU di MySQL (Azure & On-Prem)
π― Objective
Mengidentifikasi query yang menyebabkan CPU usage tinggi pada MySQL server, baik:
-
Azure Database for MySQL (PaaS)
-
MySQL VM / On-Prem
π§ Konsep Penting
CPU tinggi biasanya disebabkan oleh:
-
Long running query
-
Full table scan
-
Missing index
-
Query concurrency tinggi (query storm)
-
Temporary table besar
-
Sorting besar tanpa index
π STEP 1 β Konfirmasi CPU Spike (Azure)
Jika Menggunakan Azure Database for MySQL
1οΈβ£ Login ke Azure Portal
2οΈβ£ Masuk ke resource Azure Database for MySQL
3οΈβ£ Klik Metrics
4οΈβ£ Tambahkan metric berikut:
-
CPU percent
-
Active connections
-
IO percent
-
Memory percent
π Perhatikan:
-
Apakah CPU spike terjadi tiba-tiba (burst)?
-
Apakah spike sejalan dengan kenaikan Active Connections?
π STEP 2 β Cek Query Aktif (Real-Time)
Jalankan:
SHOW FULL PROCESSLIST;
Atau lebih fokus:
SELECT *
FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep'
ORDER BY TIME DESC;
Perhatikan:
-
Query dengan TIME > 10 detik
-
State seperti:
-
Sending data
-
Copying to tmp table
-
Locked
-
Sorting result
-
π Jika ada query dengan TIME besar β kemungkinan penyebab CPU.
π₯ STEP 3 β Cek Concurrency Level
Jalankan:
SHOW GLOBAL STATUS LIKE 'Threads_running';
Interpretasi umum:
| Threads_running | Kondisi |
|---|---|
| 1β5 | Normal |
| 5β10 | Medium |
| 10β30 | High |
| >30 | Critical |
Jika tinggi bersamaan dengan CPU spike β concurrency overload.
π STEP 4 β Cek Jumlah Query per Detik (Detect Query Storm)
Jalankan:
SHOW GLOBAL STATUS LIKE 'Queries';
Catat nilai.
Tunggu 5 detik, jalankan lagi.
Hitung selisih:
(Query2 - Query1) / 5 = QPS (Queries Per Second)
Jika QPS sangat tinggi β kemungkinan query storm.
π STEP 5 β Gunakan Performance Schema (Paling Akurat)
Jalankan:
SELECT
DIGEST_TEXT,
COUNT_STAR,
ROUND(SUM_TIMER_WAIT/1000000000000,2) AS total_seconds,
ROUND(AVG_TIMER_WAIT/1000000000000,4) AS avg_seconds
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
Ini akan menampilkan:
-
Query paling sering dijalankan
-
Query paling banyak menghabiskan waktu CPU
-
Total waktu eksekusi kumulatif
π Ini metode paling efektif untuk investigasi CPU.
𧨠STEP 6 β Cek Slow Query
Cek apakah slow query aktif:
SHOW VARIABLES LIKE 'slow_query_log';
Jika ON:
SHOW VARIABLES LIKE 'long_query_time';
Query yang lebih lama dari nilai tersebut akan masuk slow log.
π STEP 7 β Cek Connection Pressure
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW VARIABLES LIKE 'max_connections';
Jika Max_used_connections mendekati max_connections β connection pressure.
π§ STEP 8 β Interpretasi Hasil
Kondisi 1 β CPU Tinggi + Threads_running Tinggi
π Query concurrency overload.
Kondisi 2 β CPU Tinggi + Query TIME besar
π Ada long-running query.
Kondisi 3 β CPU Tinggi + QPS Tinggi
π Query storm.
Kondisi 4 β CPU Tinggi + IO tinggi
π Disk bottleneck.
Kondisi 5 β Semua normal tapi CPU spike
π Burst query singkat atau background maintenance.
π Checklist Investigasi Cepat (Ringkas)
Saat CPU spike terjadi:
-
SHOW FULL PROCESSLIST -
SHOW GLOBAL STATUS LIKE 'Threads_running'; -
Cek QPS
-
Query Performance Schema digest
-
Cek Azure Metrics
π§Ύ Kesimpulan Standar Managed Service
CPU spike investigation should focus on active queries, concurrency level, and query execution summary from Performance Schema.
Snapshot analysis must be performed during the spike window to accurately identify the root cause
No Comments