Latch free ve library cache: mutex X bekleme olaylarının çözümü
Veritabanlarındaki yoğun delete insert işlemlerinde ilgili sql cümleleri için Latch free ve library cache: mutex X bekleme olayları görülebilir.
ADDM ve AWR raporlarında yüksek seviyelerde Latch free ve library cache: mutex X bekleme olayları görülüyorsa , sebeplerinden biri , ilgili tablo indekslerinin parallel degree değerlerinin çok yüksek tutulması olabilir.
DBA_HIST_ACTIVE_SESS_HISTORY tablosundan kontrol edildiğinde yoğun şekilde “library cache: mutex X” bekleme olayı görülecektir. Aşağıdaki sorgu ile hangi sorguların bu bekleme olayına sebep olduğu tespit edilebilir.
SELECT *
FROM DBA_HIST_ACTIVE_SESS_HISTORY
WHERE event = 'library cache: mutex X'
ORDER BY sample_time DESC;
yada
select sql_id, session_id,in_parse, in_sql_execution
from gv$active_session_history
where sample_time between to_date('16052017 10:57:00', 'ddmmyyyy hh24:mi:ss'
and to_date('16052017 11:30:00', 'ddmmyyyy hh24:mi:ss'
and event = 'library cache: mutex X'
order by sql_id;
Çalışan sorgunun ne olduğunu da görmek için aşağıdaki sorguyu kullanabilirsiniz.
WITH got_my_sql_id
AS ( SELECT sql_id, COUNT (1)
FROM gv$active_session_history
WHERE sample_time BETWEEN TO_DATE ('06062017 13:00:00',
'ddmmyyyy hh24:mi:ss')
AND TO_DATE ('07062017 09:30:00',
'ddmmyyyy hh24:mi:ss')
AND event = 'library cache: mutex X'
GROUP BY sql_id)
SELECT DISTINCT sql_id, sql_text
FROM v$sql b
WHERE EXISTS
(SELECT NULL
FROM got_my_sql_id a
WHERE a.sql_id = b.sql_id)
ORDER BY sql_id;
Sorgulardaki ilgili tabloların indekslerinin parallel degree değerlerinin kontrolünü aşağıdaki sorgu ile yapabilirsiniz.
select * from dba_indexes where degree > '1';
Koşul olarak , bir önceki sorgudan dönen tabloları da ekleyebilirsiniz.
Sonrasında ilgili indekslerin noparallel şeklinde değiştirilmesi gerekmektedir. Bu işlemi aşağıdaki gibi yapabilirsiniz.
Gerekli alter index komutlarını aşağıdaki sorgu ile oluşturun.
select 'alter index '||owner||'.'||index_name||' noparallel;' from dba_indexes where degree > '1'
Oluşturulan sorguları sqlplus ile çalıştırın.
Aynı zamanda parallel_max_server parametresini de kontrol etmenizde fayda var. Bu parametrenin yüksek olması da aynı bekleme olayına sebep olabilir.
SQL> show parameter parallel_max_servers NAME TYPE VALUE ------------------------------ ----------- ----- parallel_max_servers integer 1
![]()
