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.