DBAtlas · Veritabanı operasyon atlası

Yüksek CPU

Belirti

Sunucu CPU'su %90+; sistem geneli yavaş, load average yüksek.

1. CPU'yu DB mi yiyor doğrula

OS'te top/mpstat ile CPU'yu tüketen sürecin gerçekten DB olduğunu doğrula. Bazen komşu bir süreç veya yedek/antivirüs yiyor. iowait yüksekse sorun CPU değil disk'tir.

2. En çok CPU harcayan sorguları bul

CPU zamanına göre sıralı ilk sorguları çıkar. Genelde birkaç sorgu (kötü plan, full scan, eksik index) CPU'yu yakar.

Oracle

SELECT sql_id, cpu_time/1e6 cpu_sec, executions, sql_text FROM v$sql ORDER BY cpu_time DESC FETCH FIRST 10 ROWS ONLY;

PostgreSQL

SELECT query, calls, total_exec_time, mean_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;

MySQL

SELECT digest_text, count_star, sum_timer_wait/1e12 sec FROM performance_schema.events_statements_summary_by_digest ORDER BY sum_timer_wait DESC LIMIT 10;

SQL Server

SELECT TOP 10 total_worker_time/execution_count avg_cpu, execution_count, SUBSTRING(t.text,1,200) FROM sys.dm_exec_query_stats q CROSS APPLY sys.dm_exec_sql_text(q.sql_handle) t ORDER BY total_worker_time DESC;

3. Plan / index sorunu mu bak

Suçlu sorgunun planını al. Full table scan, nested loop patlaması, hash join spill, ya da parametre sniffing/bayat istatistik kaynaklı kötü plan CPU yakar. Index ekle veya istatistik topla.

4. Acil rahatlat

Kaçak sorguyu kill et, gerekiyorsa Resource Manager/Resource Governor ile sınırla. Ani başlayan yükte son deploy'u/parametre değişimini gözden geçir.

5. Kalıcı çöz

Sorguyu/index'i düzelt, plan kararlılığı sağla, istatistik toplama işini planla. Sürekli %100 ise ölçeklendirme (CPU ekleme, read replica'ya okuma dağıtma) gerekebilir.

DBAtlas'ta aç →