DBAtlas · Veritabanı operasyon atlası

Açık / uzun süren transaction'ları bul

Oracle

SELECT s.sid, s.serial#, s.username,
       t.start_time, t.used_ublk AS undo_blocks
FROM v$transaction t
JOIN v$session s ON t.ses_addr = s.saddr
ORDER BY t.start_time;

used_ublk yüksekse büyük bir transaction çok undo tüketiyordur; commit/rollback bekleniyor olabilir.

PostgreSQL

SELECT pid, usename, state,
       now() - xact_start AS xact_age, query
FROM pg_stat_activity
WHERE xact_start IS NOT NULL
ORDER BY xact_start;

'idle in transaction' durumundaki uzun transaction'lar VACUUM'u ve tuple temizliğini engeller; bunları izleyin.

MySQL

SELECT trx_id, trx_state, trx_started,
       TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS age_sec,
       trx_mysql_thread_id
FROM information_schema.innodb_trx
ORDER BY trx_started;

trx_mysql_thread_id ile PROCESSLIST'e bağlanıp gerekirse KILL edebilirsiniz.

SQL Server

DBCC OPENTRAN;
-- Ayrıntılı:
SELECT st.session_id, dt.database_transaction_begin_time
FROM sys.dm_tran_database_transactions dt
JOIN sys.dm_tran_session_transactions st ON st.transaction_id = dt.transaction_id
WHERE dt.database_id = DB_ID()
ORDER BY dt.database_transaction_begin_time;

Uzun açık transaction'lar log'un kesilmesini (truncate) engeller ve log dosyasını şişirir.

MongoDB

db.adminCommand({
  currentOp: 1,
  "transaction": { $exists: true }
})

Uzun çok-belge transaction'ları transactionLifetimeLimitSeconds (varsayılan 60 sn) sonunda otomatik iptal edilir.

Redis

# Uygulanamaz: MULTI/EXEC işlemleri kısa ve atomiktir, açık kalmaz.

Redis transaction'ları lock tutmaz; uzun süren tek komutlar için SLOWLOG'a bakın.

DBAtlas'ta aç →