enq: TX – row lock contention bekleme olayı
enq: TX – row lock contention , işlemlerdeki satır kilit çakışması bekleme olayı olarak nitelendirilebilir.
Bu olay, başka bir oturum tarafından tutulan satır kilidini bekleyen bir oturumun olduğunun göstergesidir. Bu bekleme olayıyla ilişkili bekleme süresi çok fazladır ve uygulamadaki performans sorunlarından sorumlu olabilir.
TX enqueue , bir işlem ilk değişikliği başlattığında , özel olarak edinilir ve işlemde COMMIT ya da ROLLBACK yapılana kadar tutulur.
TX enqueue’nun birkaç durumları vardır:
Mod 6’da TX bekleme durumu :
Bir session, başka bir session tarafından tutulan, satır seviyesindeki kilit için bekliyorsa , Mod 6’da TX bekler. Bu durum , bir kullanıcı , bir satırı silerken yada güncellerken , başka bir kullanıcı da aynı işlemi yapmak istediğinde oluşur.
Mod 4’de TX bekleme durumu :
UNIQUE indeksteki, potansiyel kopyalar nedeniyle bir oturum bekliyorsa , Mod 4’de TX bekleme oluşur. İki oturum aynı anahtar değerini girmeye çalışırsa, ikinci oturum bir ORA-0001 hatasının oluşmasının gerekip gerekmediğini görmek için beklemek zorundadır.
Her iki durumdaki beklemeleri çözmek için kilidi tutan ilk session’da COMMIT yada ROLLBACK yapılmalıdır.
Sorun giderme :
Aşağıdaki sorgular ile hangi SQL cümleciğinin bekletildiğini görebilirsiniz.
SELECT sid, sql_text FROM v$session s, v$sql q WHERE sid IN (SELECT sid FROM v$session WHERE state IN ('WAITING') AND wait_class != 'Idle' AND event = 'enq: TX - row lock contention' AND (q.sql_id = s.sql_id OR q.sql_id = s.prev_sql_id));
ya da
SELECT sid, sql_text FROM v$session s, v$sql q WHERE sid IN (SELECT sid FROM v$session WHERE state IN ('WAITING') AND wait_class != 'Idle' AND event = 'enq: TX - row lock contention' AND (q.sql_id = s.sql_id OR q.sql_id = s.prev_sql_id));
Aşağıdaki sorgu ile hangi session’ın , hangi session’ları blokladığınız görebilirsiniz.
SELECT blocking_session, sid, serial#, wait_class, seconds_in_wait FROM v$session WHERE blocking_session IS NOT NULL ORDER BY blocking_session;
Bu bekleme olayı , uygulama tarafındaki değişiklik ile giderilebilir. Uygulama geliştiriciyi yönlendirmek için yukarıdaki sorgular ile tespit edilen bilgiler paylaşılabilir.