MySQL InnoDB History List Keeps Growing: Find Purge Blockers
Separates long transactions, replica reads and purge throughput issues to safely reduce undo backlog.
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.
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
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.
4. Remediation & Action Plan
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.