dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #18
mysql
PerformanceSEV2 · CİDDİ BOZULMA15-30 dakika / 15-30 minsSUPER / CONNECTION_ADMIN / RELOAD / REPLICATION CLIENT

MySQL Yavaş Sorgu Sayısı Arttı: Regresyon ve COLLSCAN Triyajı

Slow_queries artışını baz çizgiyle karşılaştırır; digest, full scan ve diske taşan geçici tablolar üzerinden sorgu regresyonunun nedenini arar.

İlişkili Metrik:M18
İlişkili Script:S25S31S32
#slow-query#digest#full-scan#regression

Operasyonel Güvenlik ve Risk Uyarısı

Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.

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

1. Belirti / Symptom

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

2. Etki / Impact

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

3. Teşhis / Diagnosis

🟢 Salt Okunur1. 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.

🟢 Salt Okunur2. 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;
🟢 Salt Okunur3. 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. Müdahale / Response

🟡 Geri Alınabilir1. 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.
🟡 Geri Alınabilir2. 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.
🟡 Geri Alınabilir3. 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.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ4. `FLUSH STATUS`, `TRUNCATE performance_schema...` veya toplu `KILL` ile olay kanıtlarını yok etmeyin.

5. Doğrulama / Verification

- 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. Geri Alma / Rollback

- 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.

Diğer MYSQL Runbook'ları