DBAtlas · Veritabanı operasyon atlası

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.

DBAtlas'ta aç →