Pages

4 Ocak 2012 Çarşamba

Sorgu geliştirici ile ilgili genel kavramlar

Sorgu geliştirici(query optimizer) ile ilgili kullanılan temel kavramlar aşağıda yer almaktadır.

Değerlendirme(Estimation)

Değerlendirici, verilen bir yürütme planının tüm maliyetini saptamaktadır. Bu hedefe ulaşmak için değerlendirici 3 değişik tipte ölçü üretmektedir.

·         Seçicilik(Selectivity):  Bu ölçü, satır setinden satırların bir bölümünü temsil etmektedir. Seçicilik, sorgudaki city=’Pekin’ gibi bir yükleme veya (city=’’Pekin’ AND product=’tomato’) gibi yüklem kombinasyonlarına bağlıdır.
·         Önem(Cardinality): Bu ölçü, satır setindeki satır sayısını temsil etmektedir.
·         Maliyet(Cost): Bu ölçü, kullanılan kaynağın veya işin birimini temsil etmektedir.Sorgu geliştirici, iş birimi olarak  disk I/O sunu, CPU kullanımını ve bellek kullanımını kullanır.

Eğer istatistikler uygunsa, değerlendirici bu ölçümleri birbiriyle kıyaslamak için kullanır. İstatistikler, ölçümlerin doğruluk derecesini artırmaktadır.  

Bir yüklem, bir satır setinden belirli sayıda satırı filtreler. Böylece, yüklem seçiciliği  ile yüklem testinden ne kadar satırın geçeceğini belirlenir. Seçicilik aralığı 0.0 dan 1.0 a kadardır.  0.0 değerinde bir seçicilik, satır setinden hiçbir satırın seçilmediğini gösterirken, 1.0 değeri ise tüm satırların seçileceği anlamına gelmektedir. Bir yüklem, 0.0 değerine yakınken daha çok seçici yaklaşımı gösterirken, 1,0 değerine yaklaştığında ise daha az seçici yaklaşımı göstermektedir.  Geliştirici, seçiciliği istatistiklerin uygun olup olmamasına bağlı olarak değerlendirmektedir.

·         İstatistik mevcut değilse

OPTIMIZER_DYNAMIC_SAMPLING başlangıç parametresi değerine dayanarak, geliştirici, ya dinamik örneklemeyi kullanır ya da dahili varsayılan değeri kullanır. Veritabanı, yüklem tipine bağlı olarak değişik dahili varsayılanları kullanmaktadır. Örneğin; (city=’Pekin’) eşitlik yüklemi için dahili varsayılan değeri, (city>’Pekin’) gibi aralık yüklemine nazaran daha düşüktür, çünkü eşitlik yükleminin daha küçük bir satır bölümünü döndüreceği beklentisi vardır.

·         İstatistik mevcutsa

İstatistikler mevcutsa, değerlendirici bunları seçicilik değerlendirmesinde kullanmaktadır. 15 farklı şehir ismi olduğunu farzedelim; city=’Pekin’ eşitlik yüklemi için seçicilik, şehir isminin n sayıdaki farklı değerine karşılık gelmektedir, ki benim örneğimde sorgu 15 farklı değerden birine ait satırları seçtiğinden dolayı seçicilik değeride 1/15=0.06 olmaktadır.

Eğer “city” kolonu için histogram mevcutsa, bu durumda değerlendirici farklı değer sayısı yerine, histogramı kullanacaktır. Histogram, bir kolon için farklı değerlerin dağılımını yakaladığından dolayı, özellikle çarpık veriler içeren kolonlar için çok daha iyi seçicilik değerlendirmesi yapabilmektedir.  

·         Önem(Cardinality): Cardinality,  bir satır seti içindeki satır sayısını temsil etmektedir. Bu bağlamda, satır seti bir temel tablo veya görünüm olabileceği gibi, bir birleşme yada GROUP BY operatörü sonucuda olabilmektedir.
·         Maliyet(Cost): Maliyet, bir operasyonda kullanılan kaynak veya iş birimini temsil etmektedir. Sorgu geliştirici, iş birimi olarak  disk I/O sunu, CPU kullanımını ve bellek kullanımını kullanır. Operasyon, bir tablonun taranması, indeks kullanılarak tablodan satırlara erişilmesi, iki tablonun birleştirilmesi veya bir satır setine sort yapılması olabilmektedir. Maliyet, veritabanı sorguyu yürütürken ve sonucu oluştururken uğraması beklenen iş birimi sayısıdır.  

Erişim yolu(access path) temel tablodan  veri almak için gereken iş birimi sayısını belirlemektedir. Erişim yolu, tablo taraması, hızlı tam indeks taraması(fast full index scan), veya bir indeks taraması olabilir.

·         Tablo taraması veya hızlı tam indeks taraması

Bir tablo taraması veya hızlı tam indeks taraması esnasında, diskten tekli I/O yapısında birçok blok okunmaktadır. Bu sebeple, tarama maliyeti taranacak blok sayısına ve çoklu okumanın miktar değerine bağlı olmaktadır.

·         İndeks taraması

İndeks tarama maliyeti, B-tree içindeki seviyelere, taranacak indeks yaprak(leaf) blok sayısına ve indeks anahtarında ROWID kullanılarak alınıp getirilen satır sayısına bağlı olmaktadır. Bu arada, ROWID kullanarak alınıp getirilen satırların maliyetide indeks kümeleme faktörüne(index clustering factor) bağlı olmaktadır.  

Birleşme maliyeti, birleşecek iki satır setinin bireysel erişim maliyeti kombinasyonunu ile birleşme operasyonu maliyetini temsil etmektedir.

Plan Oluşturma
Plan oluşturucu, farklı erişim yolları, birleşme metotları ve birleşme sıraları denemeleriyle bir sorgu bloğu için çeşitli planlar araştırmaktadır. Aynı sorgu sonucunu oluşturmak için kullanılmak üzere değişik erişim yolları, birleşme metotları ve birleşme sıralamasıyla ilgili çeşitli kombinasyonlar kullanılarak pek çok plan uygun olmaktadır. Plan oluşturucunun amacı, en düşük maliyete sahip planı seçmektir.

Birleşme sırası: Birleşme sırası, erişilen ve birlite birleştirilen tablolar gibi sırasıyla farklı birleştirme öğeleridir. Tablo1, Tablo2 ve Tablo3 ün birleştiğini varsayalım. Birleşme sırası muhtemelen aşağıdaki gibi olacaktır.

1. Veritabanı önce Tablo1 e erişir.
2. Veritabanı Tablo2 ye erişir ve kendi satırlarını Tablo1 ile birleştirir.
3. Veritabanı Tablo3 e erişir ve Tablo1 ile Tablo2 arasında birleşme sonucunu kendi satırları ile birleştirir.

Sorgu alt planları: Geliştirici, herbir içiçe(nested) alt sorguyu veya birleştirilmemiş (unmerged) görünümü ayrılmış bir sorgu bloğu ile temsil eder ve bir alt plan oluşturur. Veritabanı, sorgu bloklarını aşağıdan yukarıya ayrı ayrı en iyi duruma getirir. Böylece, veritabanı ilk olarak en içteki sorgu bloğunu en iyi duruma getirmekte ve bunun için bir alt plan oluşturmakta, ardındanda en sonunda bütün sorguyu temsil eden dış sorgu bloğunu oluşturmaktadır.

Bir sorgu bloğu için muhtemel plan sayısı FROM kısmındaki birleşme miktarı sayısı ile orantılıdır. Bu sayı birleşme miktarı sayısı ile katlanarak artmaktadır. Örneğin; beş tablonun birleşmesi için muhtemelen planlar, iki tablonun birleşmesi için muhtemel planlardan belirgin şekilde daha yüksek olacaktır.

Plan seçiminde kestirme yol: Plan oluşturucu,  en düşük maliyetli planı ararken denediği planların sayısını azaltmak için dahili bir kestirme yol kullanmaktadır. Kestirme yol, mevcuttaki en iyi planın maliyetine dayanmaktadır. Eğer mevcuttaki en iyi maliyet büyükse, bu durumda plan oluşturucu en düşük maliyetli planı bulmak için alternatif planlar araştırır. Eğer mevcuttaki en iyi maliyet küçükse,  daha fazla plan iyileştirme anlamlı olmayacağından plan oluşturucu bu hızlı aramayı sonlandırır. Eğer plan oluşturucu optimal seviyeye yakın maliyette plan oluşturan bir başlangıç birleştirmesi ile başlarsa, kestirme yol metodu çok iyi çalışır. Çünkü iyi bir başlangıç birleştirmesi bulmak oldukça zordur.

2 yorum: