dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #18
mysql
PerformanceSEV2 · DEGRADATION15-30 dakika / 15-30 minsSUPER / CONNECTION_ADMIN / RELOAD / REPLICATION CLIENT

MySQL Slow Query Spike: Regression and Full-Scan Triage

Compares Slow_queries growth against baseline, then traces regressions through digests, full scans and on-disk temporary tables.

Related Metrics:M18
Related Scripts:S25S31S32
#slow-query#digest#full-scan#regression

Operational Safety & Risk Notice

This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Symptom & Signals

- M18 (`Slow_queries` artış hızı) baz çizginin birkaç katına çıkar; p95/p99 gecikmesi, uygulama timeout'ları artar.

2. Business & Technical Impact

İşlem süreleri uzar, aktif bağlantılar birikir ve çağrı zincirinde zaman aşımı oluşabilir.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. Sürümü, eşiği ve çalışma süresini kaydedin:
sql
SELECT VERSION(), @@GLOBAL.long_query_time, @@GLOBAL.slow_query_log;
SHOW GLOBAL STATUS LIKE 'Slow_queries';

`Slow_queries` kümülatiftir; hız için iki örnek arasındaki farkı alın. `long_query_time` veya log ayarı yakın zamanda değiştiyse eski baz çizgiyle kıyas yanıltıcı olabilir.

🟢 Read-Only2. S25 ile en yüksek toplam ve ortalama gecikmeli digest'leri bulun; `performance_schema` statement enstrümantasyonu kapalıysa digest boş olabilir:
sql
SELECT LEFT(digest_text,160) AS pattern, count_star,
       ROUND(sum_timer_wait/1e12,2) AS total_s,
       ROUND(avg_timer_wait/1e9,2) AS mean_ms,
       sum_rows_examined, sum_rows_sent, sum_no_index_used
FROM performance_schema.events_statements_summary_by_digest
WHERE schema_name IS NOT NULL ORDER BY sum_timer_wait DESC LIMIT 20;
🟢 Read-Only3. S31 (`sys.statements_with_full_table_scans`) ile tam taramaları ve S32 ile disk geçici tabloları kontrol edin. İlgili gerçek sorgu için `EXPLAIN` planını eski dağıtım/planla karşılaştırın; kilit beklemesi varsa `mysql-lock-wait-timeout`'a geçin.

4. Remediation & Action Plan

🟡 Reversible1. Yeni dağıtım/batch ile aynı zamana rastlıyorsa değişikliği uygulama sahibinin onayıyla geri alın veya iş hızını kısın.
🟡 Reversible2. Seçici olmayan sorguyu indeks, filtre, LIMIT ve pagination ile düzeltin; plan ve yazma maliyetini test edin. Büyük tabloda indeks oluşturma DDL etkili olduğundan kontrollü pencerede uygulayın.
🟡 Reversible3. Bilgi gerekiyorsa geçici `slow_query_log` açın; yoğun log yazımı ve hassas parametre kayıtlarını dikkate alın. İlgili slow log hedefini ve rotasyonunu denetleyin.
🔴 HIGH RISK / IRREVERSIBLE4. `FLUSH STATUS`, `TRUNCATE performance_schema...` veya toplu `KILL` ile olay kanıtlarını yok etmeyin.

5. Verification & Health Checks

- Yavaş sorgu hızı, p95 gecikmesi ve hata oranı baz çizgiye döner; `EXPLAIN` ve taranan satır sayısı iyileşir.

- Değişiklikten sonra replica gecikmesi ve yazma maliyeti artmaz.

6. Rollback & Contingency Plan

- Geçici açılan slow log'u eski değere döndürün; sorgu dağıtımını veya batch hızını eski duruma alın.

- İndeksi kaldırma işlemini ayrıca test edip bakım penceresinde yapın; iptal edilmiş sorgular otomatik devam etmez.

More MYSQL Runbooks