Minimizing System Contention ( 6- Wait Events by Class İncelemesi )


 - Aşağıdaki sorgu, wait class ın farklı türlerini ve her wait class la ilişkili bekleme olaylarını gösterir.

  SQL> select wait_class, name
    from v$event_name
    where name LIKE 'enq%'
    and wait_class <> 'Other'
    order by wait_class
   WAIT_CLASS     NAME
   --------------------  --------------------------
   Administrative    enq: TW - contention
   Concurrency    enq: TX - index contention
   …

 - Çeşitli bekleme sınıflarına gruplanmış mevcut beklemeleri görüntülemek için aşağıdaki sorguyu çalıştırın:

  SQL> select wait_class, sum(time_waited), sum(time_waited)/sum(total_waits)
     sum_waits
     from v$system_wait_class
     group by wait_class
     order by 3 desc;

   WAIT_CLASS   SUM(TIME_WAITED)  SUM_WAITS
   ------------  -----------------  -----------
   Idle     249659211     347.489249
   Commit     1318006     236.795904
   Concurrency   16126      4.818046
   User I/O    135279      2.228869
   Application   912      .0928055
   Network    139      .0011209
   …

 - Idle wait class için çok yüksek bir bekleme görürseniz, endişelenmeyin, aslında, bunu herhangi bir sağlıklı veritabanında görmeyi beklemelisiniz. Bununla birlikte, tipik bir production ortamında, user I/O ve Application wait classes altında kesinlikle daha fazla bekleme görürsünüz. Veritabanının, örneğin Application wait classes veya user I/O wait class için çok büyük bir bekleme zamanı biriktiğini fark ederseniz, bu iki bekleme sınıfını daha ayrıntılı inceleme zamanı geldi demektir. Aşağıdaki örnekte, hangi belirli beklemelerin  Application ve Concurrency class ları altında toplam bekleme süresinin yüksek olmasına neden olduğunu bulmak için birkaç wait classa bakıyoruz.
 Bunu yapmak için V$SYSTEM_EVENT ve $EVENT_NAME viewlerini V$SYSTEM_WAIT_CLASS viewına ek olarak kullanırız.
 Beklenen toplam süreye değil, bekleme olayının etkisini ölçmek için ortalama beklemeye odaklanın.

  SQL> select a.event, a.total_waits, a.time_waited, a.average_wait
    from v$system_event a, v$event_name b, v$system_wait_class c
    where a.event_id=b.event_id
    and b.wait_class#=c.wait_class#
    and c.wait_class in ('Application','Concurrency')
    order by average_wait desc;

   EVENT     TOTAL_WAITS  TIME_WAITED  AVERAGE_WAIT
   ----------------------- -----------  ------------  -------------
   enq: UL - contention  1    499    499.19
   latch: shared pool   251   10944    43.6
   library cache load lock  24    789    32.88


  Tip: En yaygın Oracle bekleme olaylarından ikisi "db file scattered read" ve "db file sequential read" olaylarıdır.
 "db file scattered read" bekleme olayı, büyük tabloların tam tablo taramalarından kaynaklanmaktadır.
 Bu bekleme olayıyla karşılaşırsanız, tabloya veya tablolara index ekleme olasılığını araştırın.
 Indexli okumalar nedeniyle de db file sequential read bekleme olayı gözlenir. Indexe eklenmiş bir okumanın iyi bir şeymiş gibi görünmesine rağmen, çok yüksek miktarda indexe eklenmiş okuma, ayarlamanız gereken verimsiz bir sorguyu potansiyel olarak gösterebilir.  db file sequential read bekleme olayı için yüksek değerler, çok sayıda küçük indexli okumadan kaynaklanıyorsa, gerçekten bu sorun değil - bu veritabanında doğaldır.

 -  row lock contention a neden olduğu enqueue waits in, bu iki sınıfın altında en çok beklemeye neden olan şey olduğunu görebilirsiniz.
 Artık veritabanındaki soruları yavaşlatan şeyin ne olduğunu biliyorsun! Performansı row lock contention dan etkilenen oturuma ulaşmak için aşağıdaki sorguyu kullanarak oturum düzeyini inceleyin:

  SQL> select a.sid, a.event, a.total_waits, a.time_waited, a.average_wait
    from v$session_event a, v$session b
    where time_waited > 0
    and a.sid=b.sid
    and b.username is not NULL
    and a.event='enq: TX - row lock contention';
    SID EVENT         TOTAL_WAITS  time_waited  average_wait
   ------  ------------------------------   ------------  -----------  ------------
    68  enq: TX - row lock contention    24     8018    298


 - Çıktı, SID 68 olan oturumun başka bir işlem tarafından tutulan bir satır kilidini beklediğini gösterir.

 Nasıl Çalışır:
 - Çeşitli Oracle bekleme olay sınıflarını anlamak, bekleme ile ilgili Oracle sorunlarını hızlı bir şekilde teşhis etme yeteneğinizi artırır. Bekleme olaylarını sınıflar halinde analiz etmek, contention, user I/O nun veya bir configuration sorununun yüksek beklemelerden sorumlu olup olmadığını size bildirmenizi sağlar.
 Yukarıdaki bölümünde verilen örnekler, bekleme olay sınıflarına dayalı olarak bekleme analizinin nasıl başlatılacağını gösterir. Bu, bekleme kaynaklarını belirlemeye yardımcı olur. Beklentilerin çoğundan sorumlu bekleme olay sınıfını belirledikten sonra, bekleme olayı sınıfının yüksek toplam beklemelere katkıda bulunan belirli bekleme olaylarını bulmak için wait event class ı inceleyebilirsiniz. Daha sonra, son sorguyu kullanarak bekleme olaylarını bekleyen kullanıcı oturumlarını belirleyebilirsiniz.

Constraint Disable-Enable

Disable Constraint BEGIN   FOR c IN   (SELECT c.owner, c.table_name, c.constraint_name    FROM user_constraints c, user_tables t    WHERE...