Transaction log / undo şişmesi
Belirti
Transaction log dosyası ya da undo/redo alanı hızla büyüyor; 'log full', 'ORA-01555 snapshot too old', 'unable to extend undo'.
1. Log'u büyüten açık transaction'ı bul
Log/undo, en eski aktif transaction bitene kadar temizlenemez. Tek bir uzun açık transaction tüm log'u tutuyor olabilir.
Oracle
SELECT s.sid, s.username, t.start_time, t.used_ublk FROM v$transaction t JOIN v$session s ON t.ses_addr=s.saddr ORDER BY t.start_time;PostgreSQL
SELECT pid, state, xact_start, now()-xact_start age, query FROM pg_stat_activity WHERE xact_start IS NOT NULL ORDER BY xact_start;MySQL
SELECT trx_id, trx_started, trx_mysql_thread_id FROM information_schema.innodb_trx ORDER BY trx_started;SQL Server
DBCC OPENTRAN;2. Motora özel kök nedeni anla
MSSQL: FULL recovery modelinde log yedeği alınmıyorsa log sonsuz büyür. Oracle: ORA-01555 undo retention/boyutu yetersiz + uzun sorgu. PG: replication slot ilerlemiyorsa WAL birikir; long transaction VACUUM'u engeller.
3. MSSQL log'u için doğru aksiyon
Log yedeği al (BACKUP LOG) — bu log'u yeniden kullanılabilir yapar. Recovery model gerçekten SIMPLE olmalıysa değiştir. Sonra gerekiyorsa (ve sadece gerekiyorsa) log'u küçült.
SQL Server
BACKUP LOG [DB] TO DISK='C:\yedek\DB_log.trn';
-- Sonra gerekiyorsa: DBCC SHRINKFILE (N'DB_log', 512);4. PG WAL / replication slot kontrolü
İlerlemeyen (inactive) bir replication slot WAL birikimine yol açar. Silmeden önce slot'un sahibini doğrula (slot_type, database, plugin): geçici olarak kopmuş bir standby ya da logical abone/CDC (ör. Debezium) olabilir. Slot düşürülürse bağlı standby yeniden kurulmalı, abone/CDC tarafı yeniden senkronize edilmelidir. Gerçekten kullanılmıyorsa düşür; kalıcı koruma için max_slot_wal_keep_size (PG13+) ile üst sınır koy.
PostgreSQL
SELECT slot_name, active, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) retained FROM pg_replication_slots ORDER BY 3 DESC;
-- Gereksizse: SELECT pg_drop_replication_slot('slot_adi');5. Undo/retention'ı ayarla ve tekrarı önle
Oracle: UNDO tablespace'i büyüt, undo_retention'ı uzun sorgulara göre ayarla (veya RETENTION GUARANTEE). Uygulamada uzun açık transaction'ları engelle. Log yedek job'unun çalıştığını izle.