Pages

20 Ocak 2012 Cuma

Birleşmelerde sorgu geliştiricinin uygun yürütme planını seçmesi

Sorgu geliştirici, bir yürütme planının seçilmesi esnasında aşağıdakileri değerlendirmeye almaktadır:

·         Sorgu geliştirici, önce en azından bir veya birden fazla tablo birleşmesinin kesinlikle en az bir satır içeren bir satır kaynağı olarak sonuçlanıp sonuçlanmayacağını belirler. Sorgu geliştirici, bu gibi durumları tablodaki UNIQUE ve PRIMARY KEY kısıtlamalarına bağlı olarak  tanımaktadır. Eğer böyle bir durum mevcutsa, o zaman sorgu geliştirici bu tablolaları ilk olarak birleşme sırasına göre yerleştirir. Ardından, geri kalan tablo kümelerinin birleşmesi işlemine gelinir.
·         Dış(outer) birleşme durumları ile birleşme komutları için, dış birleşme operatörü olan tablo, birleşme sırasında bu durum için diğer tablodan daha sonra gelmelidir. Sorgu geliştirici, bu kuralı ihlal eden birleşme sıralarını değerlendirmeye almaz. Benzer olarak,  bir altsorgu yarı birleşme ve anti birleşmelere dönüştürüldüğünde, bu alt sorgunun tabloları dış sorgu bloğunda bağlı olunan veya ilişkideki tablolardan daha  sonra gelmelidir. Ancak, bazı durumlarda karma(hash) anti birleşmelerin ve yarı birleşmelerin(semijoins) bu sıralama durumunu geçersiz kılması mümkün olmaktadır.

Sorgu geliştirici ile muhtemel birleşme sırasına, birleşme metoduna ve uygun erişim yollarına bağlı olarak  bir yürütme planı kümesi oluşturulur. Ardından, herbir planın maliyeti değerlendirilir ve en düşük maliyete sahip olan seçilir. Sorgu geliştirici, bu maliyetleri aşağıdaki şekillerde değerlendirmeye almaktadır:

17 Ocak 2012 Salı

“Oracle Database Smart Flash Cache” özelliğinin yapılandırılması

AWR raporunun daha fazla buffer cache ihtiyacı olduğuna işaret ettiğini düşünelim. Paylaşımlı havuzun doğru şekilde ayarlandığından eminsiniz. Buffer cache miktarını, paylaşımlı havuzdaki bellek tahsisini azaltarak, daha yüksek bir minimum seviyeye çıkaramıyorsunuz ve ilave olarak Oracle’a tahsis edeceğiniz daha fazla fiziksel bellek imkanıda bulunmuyor.

İşte bu sıkıntılı durumda, işletim sistemine bağlı olarak, Oracle 11.2 sürümü ile yeni gelen “Oracle Database Smart Flash Cache  özelliği ile, buffer cache için daha fazla miktarda bellek gerektiğini işaret eden durumlarda, harici olarak ekstra bellek genişletmesi yapılabilir. Bu özellik şu an sadece Solaris ve Oracle Linux işletim sistemleri ile sınırlıdır.  

Flash cache özelliğini devreye almak için aşağıdaki parametrelerin ayarlanması gerekmektedir:

13 Ocak 2012 Cuma

RMAN KEEP FOREVER, KEEP UNTIL TIME ve FORCE komutları

Oracle 11g’de KEEP FOREVER seçeneği Oracle 10g’deki yapısına göre oldukça geliştirilmiş ve online yedekleri sürekli tutmaya yarayan arşivlenmiş loglar muhafaza edilmiştir. Oracle 10g’de, yedek alındıktan sonra zaman noktasında geri kurtarmaya izin veren KEEP FOREVER  seçeneğiyle alınan bu yedek ileri sarılabilmekteydi. Oracle 11g’de, KEEP seçeneği sadece yedeği sürekli tutacak gerekli olan arşivlenmiş logları muhafaza edecektir, böylece sadece yedeğin alındığı noktaya kadar geri kurtarmak için gereken bu yedek kullanılabilir. Bu yedek tamamlandıktan sonra oluşturulan arşivlenmiş logların muhafazasına gerek kalmaz ve DELETE OBSOLETE komutu ile bunlar kullanılmaz olarak işaretlenebilir.

Oysaki Oracle 10g’de, KEEP FOREVER komutuyla alınan yedeklerden sonra alınan bütün arşivlenmiş log yedeklerinin muhafaza edilmesi gerekmekteydi.  KEEP FOREVER komutunun çalışması için RMAN kataloğunun kullanılması gerekirken, KEEP UNTIL TIME komutu katalog gerektirmez.

11 Ocak 2012 Çarşamba

SQL komutlarının ayrıştırılması safhası hakkında

SQL ile ilgili bir performans sorunu oluştuğunda,sorunu anlamak ve ardından bir çözüm bulabilmek için ilk olarak SQL komutlarının veritabanında nasıl işlendiğinin anlaşılması gerekmektedir. Uygulama, veritabanı instance’ına her bağlandığında, eninde sonunda veritabanı sunucusunda yaslı olan bir sunucu prosesine atanır. Bu sunucu prosesi, veritabanı ve son kullanıcı uygulaması arasındaki arayüzü desteklemektedir. Bu proses ayrıca SQL komutu sentaksını kontrol etmek, SQL komutunun nasıl yürütüldüğünün ve sonuçların son kullanıcı uygulamasına nasıl döndüğünün belirlenmesinden sorumludur. SQL komutu, sunucu prosesi tarafından alındığında, “hafif ayrıştırma-soft parse” meydana gelmektedir. Bu safhada komut sentaksı doğruluk için kontrol edilmekte, komut içinde referans verilen objelere kullanıcının erişim yetkisinin olduğu doğrulanmakta ve SQL “karma” değeri(SHV-SQL hash value) komut metninde hesaplanmaktadır. SHV, veritabanı içinde komutu kolayca belirlemek için kullanılan numerik bir değerdir. Ardından, SGA içindeki “library cache” de SHV in halen mevcut olup olmadığının belirlenmesi için araştırılır. Aynı yada diğer bir sunucu prosesi, benzer bir SQL komutunu halihazırda çalıştırdığında bu olay meydana gelir.  Eğer SHV bulunursa, sunucu prosesi komut hakkında “library cache” içinde saklanan bilgiyi getirir. Bu, yürütme planı olarak bilinen, sorgu içinde çeşitli nesnelere erişim için kullanılan algoritmaları içermektedir.  Komut alındıktan sonra, eğer bağlaç değişkenler(bind variables) komut içinde mevcutsa, aslına uygun değerler yerine geçer ve yürütme planı tarafından belirtilen işlemler sunucu prosesi tarafından yapılır. SQL komutlarını yürütürken bütünsel olarak en düşük kaynak maliyetini ürettiği ve en hızlı yanıt süresini verdiğinden dolayı bu arzu edilen bir olaylar dizisi olmaktadır.

10 Ocak 2012 Salı

Oracle 11.2 ile askıda tutulan istatistikler

Oracle 11g Sürüm 2 (11.2) itibariyle istatistik toparlarken aşağıdaki yeni özellikler işleme girmiştir.

·         Toparlama işlemi sonunda istatistiklerin otomatik olarak yayınlanması(varsayılan işlem)
·         Yeni istatistikleri askıda tutacak şekilde saklamak

Yeni istatistiklerin askıda tutulacak şekilde saklanması istatistik onaylanması işlemine izin verir ve  sadece tatminkar olunduğu durumlarda bunlar yayınlanır. İstatistiklerin toparlanır toparlanmaz, otomatik olarak yayınlanıp yayınlanmayacağını kontrol etmek için aşağıdaki gibi DBMS_STATS paketi kullanılır:

SELECT DBMS_STATS.GET_PREFS('PUBLISH') PUBLISH FROM DUAL;

Yukardaki sorgu TRUE veya FALSE değerini döndürür. TRUE değeri, istatistiklerin toparlandığında yayınlanacağını gösterirken, FALSE değeri istatistiklerin askıda kalacak şekilde tutulacağını göstermektedir.

PUBLISH ayarı şema veya tablo seviyesinde değiştirilebilir. Örneğin, HR şemasında employees tablosunun PUBLISH ayarını FALSE olarak değiştirmek için aşağıdaki sorgu çalıştırılabilir:

Exec dbms_stats.set_table_prefs('HR', 'EMPLOYEES', 'PUBLISH', 'false');

6 Ocak 2012 Cuma

ASMLIB sürücüsünün “update-driver” komutu ile güncellenmesi

ASMLib sürücüsünün bir ASM instance ını yönetmek için kullanıp kullanmamak hala tartışmalı bir konudur, ancak Oracle’ın bu konuda ısrarlı tavsiyeleri sonucunda Linux platformlarda kullanmayı şahsen ben tercih etmekteyim. Bu noktada, linux kernel güncellemesi öncesi veya sonrasında ASMLib sürücüsününde güncellenmesi gerekmektedir, aksi durumda sürücü uyumsuzluğu sebebiyle ASMLib modülü sisteme yüklenemez. 

Bilindiği üzere ASMLib sürücüsü,  kernel bağımlıdır ve aynı kernel versiyonunu ile eşleşmesi gerekmektedir.  Bu noktada, Oracle web sitesinden ASMLib sürücüsünün güncel versiyonu bulunabilir, siteden ücretsiz olarak indirilip, Linux sisteme kurulabilir. Oracleasm-support 2.1.0 sürümünden itibaren “update-driver” gömülü komutu kullanılarak, hem zamandan tasarruf sağlanabilir, hemde ASMLib sürücüsü güncelleme işlemi basitleştirilebilir.

Peki bu komut nasıl çalışmaktadır?Örnek olarak,  kernel sürücüsünü 2.6.18-194.8.1.0.1.el5 x86_64 versiyonuna yükselttik, ancak ASMLib sürücüsü hala eski versiyonda.  Neticede, açılış sonrasında ASMLib modülü yüklenirken aşağıdaki hata mesajı alınacak ve modul başlatılamayacaktır.

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.