Pages

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');

Daha sonrasında artık employees tablosu için istatistik toparlama işlemi tamamlandığında bu istatistikler otomatik olarak yayınlanmayacaktır. Bunun yerine, yeni toparlanan bu istatistikler gözden geçirme ve değerlendirme içni USER_TAB_PENDING_STATS  tablosunda muhafaza edilecektir.

Varsayılan olarak, sorgu geliştirici data dictionary görünümlerde yayınlanan istatistikleri kullanır. Eğer, sorgu geliştiricinin yeni toplanmış askıdaki istatistikleri kullanması isteniyorsa, OPTIMIZER_USE_PENDING_STATISTICS başlangıç parametresinin TRUE olarak ayarlanması gerekmekte(varsayılan ayar FALSE’dur) ve ilgili tablo veya şemaya karşı işyükünün tekrar çalıştırılması gerekmektedir:

alter session set optimizer_use_pending_statistics = TRUE;

Sorgu geliştirici, SQL komutlarını derlerken, yayınlanan istatistikler yerine, askıda tutulan istatistikleri kullanacaktır. Eğer askıda tutulan istatistikler geçerliliğini muhafaza ediyorsa, bu durumda aşağıdaki komut çalıştırılarak bunlar “public” erişime açılabilir:

Exec dbms_stats.publish_pending_stats(null, null);

Bununla beraber, aşağıdaki gibi belirli nesneler içinde askıda tutulan istatistikler yayınlanabilir.

Exec dbms_stats.publish_pending_stats('HR','EMPLOYEES');

Eğer askıda tutulan istatistiklerin yayınlanması istenmiyorsa, aşağıdaki komut ile bunlar sistemden silinebilir:

Exec dbms_stats.delete_pending_stats('HR','EMPLOYEES');

Askıda tutulan istatistikler DBMS_STATS.EXPORT_PENDING_STATS fonksiyonu yardımıyla export edilebilir. Test ortamına export edilen bu istatistikler ile yeni istatistiklere karşı tam işyükü çalıştırılmasına imkan sağlanabilir.

0 yorum:

Yorum Gönder