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