Tag: Oracle Density

Oracle Histogram

Tablo ve sütun istatistikleri, optimizer a çok şey anlatır, ancak Optimizera tablodaki veya sütundaki verilerin çeşitliliğini bildiren bir mekanizma sağlamaz. Örneğin, bu istatistikler sütunda verilerin skew data (çarpık/birbiriyle kesişmeyen veri) olup olmadığını veya bir tablodaki sütunlar arasında bir korelasyon olup olmadığını (farklı sütunlar arasındaki doğrusal ilişkinin yönü ve gücü) Optimizer’e söyleyemez. Verilerin çeşitliliği hakkındaki bilgiler, histogramlar, sütun grupları (column groups) ve sorgu istatistikleri gibi temel istatistiklerin uzantıları kullanılarak Optimizer’e sağlanabilir.

Histograms

Histogramlar, Optimizer ‘a bir sütundaki verilerin dağılımını anlatır.  Varsayılan olarak (histogram olmadan), Optimizer, bir sütundaki belirsiz değerler arasında tek bir satır dağılımını varsayar. (yani hep aynı değerde veri varmış gibi düşünür)

Yukarıda tarif edildiği gibi, Optimizer, bir eşitlik öngörüsünün kardinalitesini, tablodaki toplam satır sayısını eşitlik yüklemesinde kullanılan sütundaki farklı değerlerin sayısına bölerek hesaplar. Sütundaki veri dağılımı uniform (tekdüze) değilse (yani veri skew (çarpık) ise) kardinalite testi yanlış olacaktır. Düzgün olmayan bir veri dağılımını doğru bir şekilde yansıtmak için sütunda bir histogram gerekir. Histogramın varlığı, Optimizer tarafından cardinality’i tahmin etmek için kullanılan formülü değiştirir ve daha hassas bir uygulama planı oluşturmasını sağlar.

Oracle, sütun kullanım bilgilerine (SYS.COL_USAGE $) ve veri eğrilmesinin öncülüğünü esas alarak histogramlara ihtiyaç duyan sütunları otomatik olarak belirler.

Oracle, sütun kullanım bilgilerine (SYS.COL_USAGE $) ve skew veriye(çarpık)  bağlı olarak histogramlara ihtiyaç duyan sütunları otomatik olarak belirler. Örneğin, bir sütunda unique alan var ve yanlızca eşitlik var mıdır yok mudur şartı gelirse Oracle histogram oluşturmaz.

İki tip histogram vardır; frequency veya height-balanced. Oracle, sütundaki farklı değerlerin sayısına göre oluşturulacak histogram türünü belirler. (continue reading…)

192 total views, 4 views today


Oracle İstatistik

Oracle veritabanı ilk piyasaya sürüldüğü yıllarda, bir SQL cümlesinin nasıl çalıştırılacağına RBO (Rule Based Optimizer) isimli bir optimizer karar veriyordu. Bu kurallara sıra atanıyor ve sıra değeri en yüksek olan kural işletiliyordu.

Rule Based Optimizer(RBO) : Adı üstünde “execution plan” çıkarırken belli bir sırada tanımlı kural tablosundan faydalanır.Bu kural tablosu aşağıdaki şekildedir :

  1. Single Row by Rowid
  2. Single Row by Cluster Join
  3. Single Row by Hash Cluster Key with Unique or Primary Key
  4. Single Row by Unique or Primary Key
  5. Clustered Join
  6. Hash Cluster Key
  7. Indexed Cluster Key
  8. Composite Index
  9. Single-Column Indexes
  10. Bounded Range Search on Indexed Columns
  11. Unbounded Range Search on Indexed Columns
  12. Sort Merge Join
  13. MAX or MIN of Indexed Column
  14. ORDER BY on Indexed Column
  15. Full Table Scan

Daha sonra Oracle 7 ile birlikte CBO (Cost Based Optimizer) isimli daha kompleks bir optimizer oluşturuldu. Bu optimizer partitioning, paralel çalışma ve en önemlisi de verinin segmentler üzerinde nasıl dağıldığını da hesaba katacak şekilde geliştirildi.

CBO, mümkün olan tüm planları inceleyerek, COST değeri en düşük olan execution planı seçer. Buradaki COST’dan kastımız ise, verilen planın ne kadar kaynak kullanılacağının bir tahminidir. Bu tahminin gerçeğe yakın olabilmesi ve dolayısı ile COST’un yaklaşık olarak hesaplanabilmesi için CBO’nun tablo, index vb. segmentler hakkında ve bu segmentler üzerindeki veri dağılımlarının, density(yoğunluk), selectivity vb. bilgilerinden haberdar olması gerekmektedir. İşte bu bilgilere “OPTIMIZER STATISTICS”, veritabanı istatistiği denir.

NOT : Density değeri 0 ve 1 arasında bir decimal değerdir. 1’e yakın değerler kolonun unselective, 0’a yakın değerler ise selective (seçici) olduğunu gösterir. Density değerinin oluşabilmesi için tablo üzerinde gather statistics işlemi çalıştırılmalıdır. Density hesaplamak için “DENSITY = 1 / (NULL olmayan distinct değer sayısı)” örneğin “DENSITY = 1 / 2000 = 0,0005 ” dir.

İstatistik bilgileri USER_TAB_STATISTICS, USER_TAB_COL_STATISTICS… gibi data dictionary tabloları içerisinde saklanır.

Aşağıdaki sorguyu inceleyelim;
(continue reading…)

346 total views, 4 views today


  • Sertifikasyon



  • Etiketler

  • Topluluklar

                     
                     
  • Live Traffic Feed

    Feedjit Widget
  • Copyright © 1996-2010 Mustafa Bektaş Tepe. All rights reserved.
    Türkçeleştirme Blogizma | AltyapıWordPress
    Takip Et

    Her yeni yazı için posta kutunuza gönderim alın.

    Diğer takipçilere katılın: