MySQL InnoDB History List Sürekli Büyüyor: Purge Engellerini Bulma
Uzun transaction, replica okuması ve purge kapasitesi sorunlarını ayırarak undo birikimini güvenli biçimde azaltır.
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.
1. Belirti / Symptom
- M17 (`trx_rseg_history_len`) aralıksız büyür; undo/disk tüketimi ve sorgu gecikmesi artar.
2. Etki / 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. Teşhis / Diagnosis
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. Müdahale / Response
5. Doğrulama / Verification
- 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. Geri Alma / Rollback
- 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.