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

MySQL On-Disk Temporary Tables Spiked: Query and Memory Investigation

Finds queries creating on-disk temporary tables and separates memory limits from query-plan causes while accounting for version differences.

Related Metrics:M21
Related Scripts:S32S31
#temporary-tables#disk-spill#tmp_table_size#filesort

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

- 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. Business & Technical 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. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. 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.

🟢 Read-Only2. 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;
🟢 Read-Only3. 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.
🟢 Read-Only4. 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. Remediation & Action Plan

🟡 Reversible1. 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.
🟡 Reversible2. 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.
🟡 Reversible3. Toplu raporlama saatini kaydırın veya replica üzerinde çalıştırın; temp alanı için kapasite planlayın.
🔴 HIGH RISK / IRREVERSIBLE4. 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. Verification & Health Checks

- 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. Rollback & Contingency Plan

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

More MYSQL Runbooks