Minimizing System Contention ( 10- Direct Path Read Wait Events )

Direct Path Read Wait Events

  - Direct path read ve direct path read temp events bekleme olayları, oturumlar SGA dan veri okumak yerine doğrudan PGA dan okumak için oluşan bekleme olaylarıdır.
  PGA dan veri okumak sorun değil, örneğin sorting gibi belirli işlemler için normal bir davranış.
  Direct path read ve direct path read temp events olayları genellikle gerçekleştirilen türlerin çok büyük olduğunda ve PGA'nın bu türlere uyum sağlayamadığında gösterir.
  - Bekleyen blokların dosya ID lerini almak için aşağıdaki komutu çalıştırın:

   SQL> select p1 "file#", p2 "block#", p3 "class#"
     from v$session_wait
     where event = 'direct path read temp';

  - P1 sütunu, okuma çağrısı için dosya ID sini gösterir. P2 sütununda BLOCK_ID blog başlangıcını, P3 sütununda da blokların sayısını gösterir.
  Daha sonra, bu dosya ID sini temporary tablespace ın tempfile ı olup olmadığını kontrol etmek için aşağıdaki sorgu çalıştıralım:

   SQL> select relative_fno, owner, segment_name, segment_type
     from dba_extents
     where file_id = &file
     and &block betgween block_id and block_id + &blocks - 1;
  - Direct read wait, diskte aşırı sort işlemi veya full table scan nedeniyle oluşabilir. Okunanların gerçekte ne olduğunu öğrenmek için, V$SESSION_WAIT
  viewının P1 sütununu (okunan çağrı için dosya ID) kontrol edin. Bunu yaparak, okumaların disk sort işlemi nedeniyle TEMP tablolarından veri okunmasından mı yoksa
  paralel slaveler tarafından full table scan yüzünden mi meydana gelip geldiğini öğrenebilirsiniz.

  - Direct read wait events olaylarına neden olanı diskte sort işlemi olarak belirlerseniz,
  PGA_AGGREGATE_TARGET parametresinin değerini yükseltin (Veya otomatik bellek yönetimi kullanıyorsanız bunun için minimum bir boyut belirtin)
  PGA boyutunu artırmak, sorgular large hash joins yaptığında iyi bir stratejidir, PGA large hash joins işlemlerini işlemek için yetersiz kalırsa, diskte aşırı I/O'ya neden olabilir.
  Bir tablo için high degree parallelism belirlediğinizde Oracle, paralel slavelerini kullanarak full table scan yapma eğilimindedir.
  I/O sistemi tüm paralel slavelerin üstesinden gelemezse, yüksek miktarda direct path read olayı ile karşılaşacaksınız.
  Bunun çözümü, söz konusu tablo veya tablolar için paralellik derecesini azaltmaktır. Ayrıca, uygun indexleri belirterek full table scan i  engelleyip engellenmediğini kontrol edin.

  Nasıl Çalışır:
  - Normalde, "sequential db read" veya "scattered db read" işlemi sırasında, veritabanı diskten SGA'ya veri okur.
  Direct path read ,SGA yı atlayarak diskten direk PGA'ya yapılan single veya multiblock okuma olayıdır.
  İdeal olarak, veri tabanı PGA'daki verilerin tümünün sorting işlemini yapmalıdır.
  Mevcut PGA'ya a huge sort uymuyorsa, Oracle sıralama verisinin bir bölümünü doğrudan diske yazar.
  Sunucu işlemi bu verileri diskten (PGA yerine) okurken "direct read" meydana gelir.

  - Direct path read event olayı, I/O sistemine aşırı yüklendiğinde ortaya çıkabilir; büyük olasılıkla tablolar için yüksek düzeyde bir paralellik ayarlamasının neden olan full table scan nedeniyle, veritabanının sunucuların işlem hızının gerektirdiği kadar bufferı yavaşlatmasına neden olur
  Burada iyi bir diske yazma stratejisi yardımcı olacaktır.
  Oracle'ın Automatic Storage Management (ASM) ı otomatik olarak verileri siler. Zaten ASM kullanmıyorsanız, veritabanınıza uygulamayı düşünün.

  - "Direct path write" ve "direct path write temp wait events" olayları "direct path read" ve "direct path read temp wait"  olaylarına benzer.
  Normalde, buffer cache den veri yazan DBWR'dir. Oracle, bir process data bufferlarına direk PGA'dan yazdığında direct path write kullanır.
  Veritabanınız disk ağır sortlar icra ediyorsa veya paralele DML işlemleri mevcutsa, bazen direct path write olaylarıyla karşılaşmayı bekleyebilirsiniz. Paralel bir CTAS (create table as select) veya direct path INSERT gibi işlemleri yürüttüğünüzde bu bekleme olayını da görebilirsiniz.
  Direct path read events olaylarında olduğu gibi, direct path write events olayları için çözüm beklemelere neyin bağlı olduğuna bağlıdır. Beklemeler çoğunlukla large sorts dan kaynaklanıyorsa, PGA_AGGREGATE_TARGET parametresinin değerini arttırmayı düşünebilirsiniz. Paralel DML gibi işlemler beklemelere neden oluyorsa, tüm diskler arasında I/O'nun düzgün bir şekilde yayılmasına dikkat edin ve ayrıca I/O sisteminin DML işlemleri sırasında yüksek dereceli paralellikleri işleyebildiğinden emin olmanız gerekir.

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...