enq: HW – contention bekleme olayı

13 Şub by Ahmet Duruöz

enq: HW – contention bekleme olayı

Enqueues, veritabanı kaynaklarına erişimi seri hale getiren paylaşılan bellek yapılarıdır (kilitler). Bir oturum veya işlemle ilişkilendirilebilirler.

HW (high water mark) ise segmentte kullanılan ve kullanılmayan alan arasındaki sınırdır.

AWR raporlarında yüksek oranda “enq: HW – contention” bekleme olayları görüldüğünde sorunun giderilmesi gerekmektedir. Genellikle basicfile şeklinde lob alan içeren tablolara yapılan insert işlemlerinde görülmektedir.

Sorunun giderilmesi için ilgili tablodaki lob alanının basicfile’dan securefile’a dönüştürülmesi gerekmektedir.

Sorun yaşanan nesnelerin tespiti için aşağıdaki yol izlenebilir.

Öncelikle ” enq: HW – contention ” ile ilgili event id’leri tespit ediyoruz.

SQL> SELECT event_id,
     name,
     parameter1,
     parameter2,
     parameter3
    FROM v$event_name
    WHERE name = 'enq: HW - contention';

 EVENT_ID  NAME 				     PARAMETER            PARAMETER           PARAMETER3
----------  ----------------------   -------------------  ------------------- -------------------
1645217925  enq: HW - contention     name|mode	          table space #       block

Sonrasında dba_hist_active_sess_history görüntüsünden ilgili event id ile ilgili file ve block bilgilerinin tespit için gerekli bilgileri tespit ediyoruz.

SQL>   SELECT event,
         p1,
         p2,
         p3,
         COUNT (1)
    FROM dba_hist_active_sess_history
   WHERE event_id = 1645217925
GROUP BY event,
         p1,
         p2,
         p3;  2    3    4    5    6    7    8    9   10   11  

EVENT									 P1	    P2	       P3   COUNT(1)
---------------------------------------------------------------- ---------- ---------- ---------- ----------
enq: HW - contention						 1213661190	    25	 17761024	   1
enq: HW - contention						 1213661190	     0	  4294200	  61
enq: HW - contention						 1213661190	    38	853351013     118356
enq: HW - contention						 1213661190	    38	373735013	   1

Bu bilgiler ile dosya ve blok bilgileri dbms_utility paketi ile tespit edilir. Pakette kullanılan bilgi , yukarıdaki sorgudaki P3 alanındaki bilgidir. Sayıca çok fazla bekleme yaşanan lob segmentin tespiti gerekmektedir.

SQL> SELECT DBMS_UTILITY.Data_block_address_file (853351013)      FILE#,
       DBMS_UTILITY.Data_block_address_block (853351013)     BLOCK#
  FROM DUAL;  2    3  

     FILE#     BLOCK#
---------- ----------
       203    1907301

Datafile ve blok bilgisi ile buradaki lob segmenti tespit ediyoruz.

SQL> SELECT owner, segment_type, segment_name
  2  FROM dba_extents
  3  WHERE file_id = 203 AND 1907301 BETWEEN block_id AND block_id + blocks - 1;

OWNER			       SEGMENT_TYPE	  SEGMENT_NAME
------------------------------ ------------------ ---------------------------------------------------------------------------------
ADURUOZ		       LOB PARTITION	  SYS_LOB0000291772C00006$$

Tespit edilen lob segmentin hangi tabloya ait olduğunu dba_lobs görüntüsünden belirliyoruz.

SQL> SELECT owner,
       table_name,
       column_name,
       chunk,
       securefile
  FROM dba_lobs
 WHERE segment_name = 'SYS_LOB0000291772C00006$$';

OWNER			 TABLE_NAME		 COLUMN_NAME	 CHUNK			 SEC
---------------- --------------- --------------- --------------- ---------------
ADURUOZ		     TESTTABLE       DOSYA			 8192 			 NO

Yukarıdaki sorgunun çıktısından , ilgili tablo belirlenmiş ve bu tablonun lob alanın securefile olmadığı görülmektedir.

Bu bekleme olayının asıl sebebi , lob alanın basic file olmasıdır. Sorunun giderilmesi için ilgili lob alanı securefile olacak şekilde değiştirilmelidir.

Loading

Bir yanıt yazın

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