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

MySQL Diskte Geçici Tablo Oranı Yükseldi: Sorgu ve Bellek İncelemesi

Diske taşan geçici tabloları üreten sorguları saptar, bellek sınırı ile sorgu planını ayrıştırır ve sürüm farklarını gözeterek müdahale eder.

İlişkili Metrik:M21
İlişkili Script:S32S31
#temporary-tables#disk-spill#tmp_table_size#filesort

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

- M21 yükselir, disk I/O ve sorgu gecikmesi artar. Oran küçük toplam örneklemde yanıltıcı olabilir; **mutlak disk temp tablo hızı** da izlenmelidir.

2. Etki / Impact

Sıralama/gruplama disk alanı ve I/O tüketir; temp dizini dolarsa sorgular başarısız olabilir. Tüm disk temp tabloları hata değildir, çalışma yükü ve veri tipine bakın.

3. Teşhis / Diagnosis

🟢 Salt Okunur1. Sayaçları iki aralıkta ölçün:
sql
SHOW GLOBAL STATUS WHERE Variable_name IN
 ('Created_tmp_tables','Created_tmp_disk_tables','Created_tmp_files');
SHOW GLOBAL VARIABLES WHERE Variable_name IN
 ('tmp_table_size','max_heap_table_size','internal_tmp_mem_storage_engine','temptable_max_ram');

5.7 MEMORY tabanlı iç tabloda `tmp_table_size` ve `max_heap_table_size` birlikte önemlidir; 8.0 TempTable motorunda davranış ve bellek sınırları sürüme göre değişir. Olmayan değişken satırı gelmemesi normaldir.

🟢 Salt Okunur2. S32 ile yüksek disk geçici tablo sayılı digest'leri bulun:
sql
SELECT db, LEFT(query,160) AS query_pattern, exec_count,
       tmp_tables, disk_tmp_tables
FROM sys.statements_with_temp_tables
ORDER BY disk_tmp_tables DESC LIMIT 20;
🟢 Salt Okunur3. S31 ile full scan ve gerçek sorgunun `EXPLAIN` çıktısını karşılaştırın. `GROUP BY`, `ORDER BY`, `DISTINCT`, geniş satırlar ve büyük sonuç kümeleri adaydır.
🟢 Salt Okunur4. MySQL temp dizininin gerçek konumu ve boş alanını doğrulayın: `SHOW VARIABLES LIKE 'tmpdir';`; OS'te ilgili mount'a `df -h` uygulayın.

4. Müdahale / Response

🟡 Geri Alınabilir1. En maliyetli sorguyu seçici filtre, uygun indeks, daha az kolon ve sınırlı sayfa boyutuyla düzeltin; indeks ekleme DDL'si önceden test edilmelidir.
🟡 Geri Alınabilir2. Bellek yeterliyse ilgili sorgu iş yüküne uygun `tmp_table_size`/sürümde geçerli TempTable sınırlarını kontrollü artırın. Global değer, eşzamanlı sorgu sayısıyla çarpılıp bellek patlamasına yol açabilir; 5.7'de `max_heap_table_size` sınırını da inceleyin.
🟡 Geri Alınabilir3. Toplu raporlama saatini kaydırın veya replica üzerinde çalıştırın; temp alanı için kapasite planlayın.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ4. Temp dosyalarını açık sunucuda elle `rm` ile silmeyin; çalışan işlemleri bozabilir. Sırf M21 oranını düşürmek için belleği körlemesine büyütmeyin.

5. Doğrulama / Verification

- 5 dakikalık delta üzerinden M21 ve disk temp tablo hızı düşer, p95 gecikmesi iyileşir.

- OS available RAM, temp mount boş alanı ve replica gecikmesi sağlıklıdır.

6. Geri Alma / Rollback

- Dinamik değişkenler değiştiyse önceki değerleri yeniden uygulayın ve kalıcı yapılandırmayı düzeltin.

- Sorgu dağıtımı regresyon üretirse önceki sürüme dönün; DDL değişikliğini ayrı planla geri alın.

Diğer MYSQL Runbook'ları