Minimizing System Contention ( 7- Buffer Busy Waits )


Minimizing System Contention ( 7- Buffer Busy Waits )
 - Veritabanınızda, AWR raporunun çıktısına göre yüksek sayıda buffer busy waits yaşanıyor. Bu bekleyişleri çözümleyelim.
 - Oracle, data block, segment header, undo header ve undo block u gibi çeşitli tampon sınıfları vardır.
 Bir buffer busy waits durumunu nasıl düzelteceğimiz, soruna neden olan arabellek sınıflarının türüne bağlı olacaktır.
 Aşağıdaki iki sorguyu vererek arabellek beklemelerine neden olan arabellek türünü öğrenebilirsiniz.
 Önce ilk sorgudan row_wait_obj# değerini alacağız ve ikinci sorguda data_object_id değerine karşılık olarak kullanmamız gerekir.
  SQL> select row_wait_obj#
    from v$session
    where event = 'buffer busy waits';
   
  SQL> select owner, object_name, subobject_name, object_type
    from dba_objects
    where data_object_id = &row_wait_obj;

 - Bu sorgular, yüksek arabellek beklemelerine neden olan belirli buffer türünü ortaya çıkaracaktır.


Segment Header
  - Sorgularınız, arabellek beklemelerinin segment üstbilgisindeki çekişmeden kaynaklandığını gösteriyorsa, aynı veri bloğuna ekleme girişiminde bulunan çeşitli işlemler nedeniyle, veritabanında free list contention olur; bu processeslerin her biri,bu bloğa data ekleyebilmek için önce free list elde etmeniz gerekir.
  Manuel space yönetiminden otomatik segment alanı yönetimi (ASSM) durumuna geçmelisiniz,
  ASSM altında database free list kullanmıyor. Bununla birlikte, çoğu durumda ASSM'ye geçmenin kolay olmayabileceğini unutmayın. ASSM'yi uygulayamayacağınız durumlarda söz konusu segment için free listi artırmanız gerekir.
  Free list gruplarını da artırmayı deneyebilirsiniz.



 Data Block
  - Data block buffer contention bir tablo veya bir index ile ilişkili olabilir. Bu tür çekişme genellikle
  right-hand indexeslerden kaynaklanmaktadır, bunlar birden fazla işlemi aynı noktaya yerleştiren indexlerdir
  Örneğin key değerleri üretmek için sequence number generators kullanmak.
  Yine manual segment management kullanıyorsanız , ASSM'ye geçin veya segment için free listi artırın.




 Undo Header ve Undo Block
  - Automatic undo management kullanıyorsanız, arabellek beklemelerinin çok azı(veya hiçbiri),
  undo segment header veya undo segment block için çekişmeden kaynaklanacaktır.
  Ancak, bu arabellek sınıflarından birisini suçlu olarak görürseniz, buffer busy waits bekleyişlerini
  çözmek için undo tablespace alanınızın boyutunu artırabilirsiniz.


Nasıl Çalışır:
  - Bir  buffer busy wait beklemesi, birden fazla işlem aynı anda aynı veri bloğuna erişildiğini gösterir.
  Buffer busy wait beklemelerin çok sayıda nedeninden biri, verimsiz bir sorgunun buffer cacheden çok fazla veri bloğu okuduğudur, böylece potansiyel olarak aynı bloklardan birine veya daha fazlasına erişmek isteyen diğer oturumları beklemekten kaçınır. Yalnızca bu değil, buffer cache den çok fazla veri okuma sorgusu cacheden gerekli blokların yaşlanmasına neden olabilir.
  Bufferı meşgul eden parçanın yer aldığı sorguları incelemelisiniz, bunlar buffer cache e okunmakta olan veri bloklarının sayısını azaltmak için bir view olarak bekler.

  - Buffer busy waits bekleyişleriniz incelendiğinde, çoğu zaman aynı blok veya blok kümesinin bulunduğu ortaya çıkarsa, bu satırlardan bazılarını silmek ve bunları tekrar tabloya insert ederek onları farklı veri bloklarına zorlamak iyi bir strateji olacaktır.

  - Buffer cache için geçerli bir bellek ayırmanızı kontrol edin ve gerekirse artırın. Daha büyük bir buffer cache de, daha fazla veri bulunacağı için, disklerdeki verileri okumak için oturumların beklemesini azaltabilir. Soruna neden olan tabloyu buffer cache deki KEEP POOL'u kullanarak belleğe yerleştirebilirsiniz.
  Hot bloğu bellekte her zaman kullanılabilir yaparak, yüksek buffer busy waits den kaçınırsınız.

  - Unique değeri çok düşük sayıdaki indexlere "low cardinality index" denir. low cardinality indexler genellikle çok fazla blok okuma ile sonuçlanır. Bu nedenle, birden fazla DML işlemi eşzamanlı olarak gerçekleşiyorsa, index bloklarından bazıları "hot" hale gelebilir ve yüksek  buffer busy waits e neden olabilir. Uzun vadeli bir çözüm olarak, veritabanınızdaki low cardinality indexlerin sayısını azaltmaya çalışabilirsiniz.

  - Bir tablo veya index gibi her Oracle veri segmenti, kullanılabilir boş bloklar gibi bilgileri kaydeden bir header bloğu içerir. Birden çok oturum aynı segmente satır eklemeye veya bunları silmeye çalışırken, data segmentinin header bloğu için çakışmaya neden olabilir.

  - Buffer busy waits beklemeler free lists için bir contention a neden olur. Bir segmente veri ekleyen bir oturum, oturumun veri ekleyebileceği boş alanlara sahip blokları bulmak için, segment için ilk önce free list bilgilerini incelemelidir.
  Veritabanında ASSM kullanırsanız, free list için çekişme nedeniyle herhangi bir bekleme görmemelisiniz.

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