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

MySQL InnoDB History List Keeps Growing: Find Purge Blockers

Separates long transactions, replica reads and purge throughput issues to safely reduce undo backlog.

Related Metrics:M17
Related Scripts:S33S22
#innodb#history-list#purge#long-transaction

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

- M17 (`trx_rseg_history_len`) aralıksız büyür; undo/disk tüketimi ve sorgu gecikmesi artar.

2. Business & Technical Impact

Purge gecikmesi nedeniyle eski satır sürümleri birikir; alan ve I/O yükü artar. Sırf yüksek sayı değil, büyüme hızı ve kapasite riski önemlidir.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. S33 ile en eski transaction'ları ve history list değerini izleyin:
sql
SELECT trx_id, trx_started, TIMESTAMPDIFF(SECOND,trx_started,NOW()) AS age_s,
       trx_state, trx_mysql_thread_id, trx_rows_locked, LEFT(trx_query,160) AS sql_text
FROM information_schema.innodb_trx ORDER BY trx_started LIMIT 20;
SELECT name, count FROM information_schema.innodb_metrics
WHERE name = 'trx_rseg_history_len';

Metrik etkin değilse `SHOW ENGINE INNODB STATUS\G` içindeki `History list length` değerine bakın. Tek seferlik fotoğraf yerine birkaç aralıklı örnek kullanın.

🟢 Read-Only2. S22 ile kilit bekleyenleri kontrol edin. Açık transaction `information_schema.processlist` içinde Sleep görünse dahi undo sürümlerini tutabilir; `trx_mysql_thread_id` ile processlist ID'yi eşleştirin.
🟢 Read-Only3. Purge thread'leri işlem yapıyor mu, disk I/O doygun mu ve yük tek büyük transaction'dan mı kaynaklanıyor inceleyin. Replica'daki uzun okuma yalnızca **o replica'nın** purge'unu etkileyebilir; sunucuları ayrı ölçün.

4. Remediation & Action Plan

🟡 Reversible1. İş sahibine danışarak uzun okuma/transaction'ı uygulama tarafında bitirin. İptal edilemiyorsa S33'ten doğrulanmış ID için `KILL <id>;` uygulayın; büyük yazma transaction'ının rollback'i uzun sürebilir.
🟡 Reversible2. Büyük DELETE/UPDATE işlerini küçük commit'li parçalara ayırın ve işlem hızını düşürün; purge'un yetişmesine zaman tanıyın.
🟡 Reversible3. Uzun transaction yok ama purge CPU/I/O'da gerideyse, `innodb_purge_threads` (sürüme bağlı yapılandırma) ve depolama kapasitesini planlı değişiklikte değerlendirin; önce darboğazı kanıtlayın.
🔴 HIGH RISK / IRREVERSIBLE4. Disk üzerindeki undo dosyalarını elle silmeyin; `OPTIMIZE TABLE` geçmiş birikimini çözmez ve ek disk ihtiyacı yaratır.

5. Verification & Health Checks

- M17 artışı durur, ardından kademeli düşer; disk doluluk eğilimi ve gecikme iyileşir.

- Yeni uzun açık transaction oluşmaz; replica'ların her birinde ayrı ölçüm yapılır.

6. Rollback & Contingency Plan

- Yazma işinin hız sınırı eski haline kontrollü döndürülür; bitirilen transaction geri getirilemez, uygulama gerekirse yeniden dener.

- Purge ayarı değiştiyse eski değeri ve yapılandırma dosyasını geri alın.

More MYSQL Runbooks