enq: TX – row lock contention bekleme olayı

8 Haz by Ahmet Duruöz

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.

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir