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

 

 

Loading

Leave Your Comment