Cek Konsumsi CPU Mysql
Siap bro ๐ฅ
Ini gue bikinkan versi Knowledge Base (KB) / SOP Managed Service yang bisa langsung lo pakai.
โ
๐ 1๏ธโฃKnowledge Base
Cara PalingMengidentifikasi CepatQuery (Productionyang Friendly)
Mengkonsumsi GunakanCPU Performance Schema (Summary View)
Kalaudi MySQL 5.7(Azure /& 8.0On-Prem)
biasanya
๐ฏ aktif.Objective
JalankanMengidentifikasi ini:query yang menyebabkan CPU usage tinggi pada MySQL server, baik:
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:
-
AzureDIGEST_TEXTโDatabasebentukfor MySQL (PaaS) -
MySQL VM / On-Prem
๐ง Konsep Penting
CPU tinggi biasanya disebabkan oleh:
-
Long running query
-
FullCOUNT_STARโtableberapa kali dijalankanscan -
Missingtotal_secโ total waktu eksekusi (indikasi konsumsi CPU)index -
Queryavg_secโconcurrencyrata-ratatinggiwaktu(queryperstorm)eksekusi -
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
๐๐ QueryPerhatikan:
-
=Apakah
kandidatCPUterbesarspikepenyedotterjadiCPU.tiba-tiba (burst)? -
Apakah spike sejalan dengan kenaikan Active Connections?
โ
๐ 2๏ธโฃSTEP 2 โ Cek Query YangAktif Sedang Jalan Sekarang(Real-Time)
Kalau CPU lagi tinggi sekarang:Jalankan:
SHOW FULL PROCESSLIST;
Atau lebih rapi:fokus:
SELECT *
FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep'
ORDER BY TIME DESC;
Perhatikan:
-
Lihat: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
lamapalingjalansering dijalankan -
StatusQuery"Sendingpalingdata"banyaklamamenghabiskan waktu CPU -
BanyakTotalquerywaktusamaeksekusiberjalan paralelkumulatif
๐ Ini metode paling efektif untuk investigasi CPU.
โ
๐งจ 3๏ธโฃSTEP Aktifkan6 โ Cek Slow Query Log (Kalau Belum Aktif)
Ini penting banget buat monitoring berkelanjutan.
Cek dulu:
apakah slow query aktif:
SHOW VARIABLES LIKE 'slow_query_log';
KalauJika OFF, aktifkan:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- misalnya >2 detik
Cek lokasi file:ON:
SHOW VARIABLES LIKE 'slow_query_log_file'long_query_time';
LaluQuery analisayang dengan:lebih lama dari nilai tersebut akan masuk slow log.
๐ STEP 7 โ Cek Connection Pressure
mysqldumpslowSHOW /path/to/slow.logGLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW VARIABLES LIKE 'max_connections';
AtauJika lebihMax_used_connections bagusmendekati pakai:
pt-query-digestโ slow.logconnection (tool dari Percona ๐ฅ sangat powerful)pressure.
โ
๐ง 4๏ธโฃSTEP Cara8 Lebihโ DetailInterpretasi (TopHasil
Kondisi 1 โ CPU Consumer)Tinggi + Threads_running Tinggi
Kalau๐ mauQuery lihatconcurrency berdasarkan total waktu eksekusi paling besar:overload.
SELECTKondisi SCHEMA_NAME,2 DIGEST_TEXT,โ COUNT_STAR,CPU ROUND(SUM_TIMER_WAIT/1000000000000,2)Tinggi AS+ total_exec_time_secQuery FROMTIME performance_schema.events_statements_summary_by_digestbesar
ORDER๐ BYAda SUM_TIMER_WAITlong-running DESCquery.
LIMITKondisi 5;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.
๐ฏ๐ CaraChecklist AnalisaInvestigasi HasilnyaCepat (Ringkas)
Biasanya pola yang bikinSaat CPU tinggi:spike terjadi:
-
โSHOWQueryFULLtanpa indexPROCESSLIST -
โSHOWSELECTGLOBAL*STATUSdariLIKEtabel besar'Threads_running'; -
โCekJOIN tanpa indexQPS -
โQuerydipanggilPerformanceribuanSchemakali (meskipun cepat)digest -
โCekORDERAzureBY tanpa index โ LIKE '%keyword%' (leading wildcard)Metrics
๐๐งพ LangkahKesimpulan Setelah Ketemu Query
Misalnya ketemu ini:
COUNT_STAR: 147452
total_sec: 415707.65
Artinya:
Query dipanggil 147 ribu kaliTotal waktu eksekusi 415 ribu detikIni jelas heavy consumer ๐ฅ
Selanjutnya:
EXPLAIN ANALYZE <query>;
Lihat:
type: ALL โ full table scan โrows: besar banget โpossible_keys: NULL โ
Kalau mau, kirim hasil:
DIGEST_TEXTCOUNT_STARtotal_sec
Nanti gue bantu analisa sebagai sudut pandangStandar Managed Service
biar
bisaCPU
kamuspikelaporkaninvestigationprofesionalshouldkefocusclienton๐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
Kalau boleh tau bro:MySQL versi berapa?Running di Azure VM kan ya? CPU berapa core?
Biar gue kasih strategi optimasi yang paling tepat ๐ฅ