Pages

14 Mayıs 2011 Cumartesi

Oracle 11g sürümünde DBMS_STATS.SET_*_PREFS prosedürü

Oracle 11g öncesi sürümlerde DBMS_STATS.SET_APRM prosedürünü kullanarak DBMS_STATS.GATHER_*_STATS prosedürünce kullanılan parametrelerin varsayılan değerini değiştirmek için kullanılmaktaydı. Yapılan herhangi bir değişikliğin kapsama alanı tüm sonraki operasyonlardır. Oracle 11g sürümünde DBMS_STATS.SET_PARM prosedürü artık kullanılmamaktadır ve tablo, şema, veritabanı ve global seviyedeki herhangi bir parametre için öcelik atamaya izin veren bir dizi prosedür ile yer değiştirmiştir. Bu yeni prosedürler DBMS_STATS.SET_*_PREFS olarak adlandırılır ve daha iyi ayrıntılı kontrol sunar.

Ancak, hangi prosedürün ne zaman kullanılması gerektiği ve bu prosedürler üzerinden hangi hiyerarşinin olduğu noktasında bazı karışıklıklar olabilmektedr. Bu yazıda DBMS_STAT.SET_*_PREFS  prosedürü kullanılarak nasıl değişiklikler yapılacağına göz atacağız

  • AUTOSTATS_TARGET (SET_GLOBAL_PREFS sadece)
  • CASCADE
  • DEGREE
  • ESTIMATE_PERCENT
  • METHOD_OPT
  • NO_INVALIDATE
  • GRANULARITY
  • PUBLISH
  • INCREMENTAL
  • STALE_PERCENT
Yukarda bahsedildiği üzere dört adet DBMS_STATS.SET_*_PREFS prosedürü vardır.

  1. SET_TABLE_PREFS
  2. SET_SCHEMA_PREFS
  3. SET_DATABASE_PREFS
  4. SET_GLOBAL_PREFS
DBMS_STATS.SET_TABLE_PREFS prosedürü, belirtilen tablonun DBMS_STATS.GATHER_*_STATS prosedürünce kullanılan varsayılan parametre değerlerini değiştirmeye izin verir.

set_table_prefs prosedürü içindeki üm parametre istatistiklerin daha güncel olarak alınması esnasında daha fazla kontrol imkanı sağlamaktadır. Yazının başında belirtilen parametrelerinin önemli olanlarının açılımına gelirsek;

stale_percent - tek beden değerlerin %10 unun üzerine yazar
incremental - Partition için toplanan artalan istatistikler
publish - Yeni istatistiklerin data dictionary görünümüne yayınlanmadan önce test imkanı verir. FALSE değerini istatistikleri yayınlamaz. Varsayılan değeri TRUE’dur.

Bu önemli bir özelliktir, çünkü tablo seviyesinde optimizer istatistiklerinin kalitesi kontrol altına alınmakta, böylece SQL optimizer davranışını geliştirmek için herhangi bir sorgu için “en iyi” çalıştırma plano seçiminine imkan sağlanır. Aşağıda HR.EMPLOYEES tablosunun toplanan istatistiklerini üretim ortamındaki data dictionary tablolarına yayınlamaz.

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

DBMS_STATS.SET_SCHEMA_PREFS prosedürü, belirtilen şemadaki tüm mevcut objelerin DBMS_STATS.GATHER_*_STATS prosedürünce kullanılan varsayılan parametre değerlerini değiştirmeye izin verir. Bu prosedür aslında belirtilen şema içindeki her bir tablonun DBMS_STATS.SET_TABLE_PREFS fonksiyonunu çağırır. Bu prosedür DBMS_STATS.SET_TABLE_PREFS prosedürünü kullandığı andan itibaren, SET_TABLE_PREFS paketinin çağırılması, çalışma süresi sonrasında oluşturulan herhangi bir yeni objeyi etkilemeyecektir. Yeni objeler tüm parametrelerin GLOBAL_REFS değerlerini toplayacaktır.

DBMS_STATS.SET_DATABASE_PREFS prosedürü veritabanındaki tüm kullanıcı tanımlı şemaların DBMS_STATS.GATHER_*_STATS prosedürünce kullanılan varsayılan parametre değerlerini değiştirmeye izin verir. Bu prosedür aslında belirtilen şema içindeki her bir tablonun DBMS_STATS.SET_TABLE_PREFS fonksiyonunu çağırır. Bu prosedür DBMS_STATS.SET_TABLE_PREFS prosedürünü kullandığı andan itibaren, SET_TABLE_PREFS paketinin çağırılması, çalışma süresi sonrasında oluşturulan herhangi bir yeni objeyi etkilemeyecektir. Yeni objeler tüm parametrelerin GLOBAL_REFS değerlerini toplayacaktır. Oracle’ın sahibi olduğu şemaları(sys,system,vb.) ADD_SYS parametre değerini TRUE olarak ayarlayarak dahil etmekte mümkündür.

DBMS_STATS.SET_GLOBAL_PREFS prosedürü, veritabanında mevcut bir tablo önceliği olmayan herhangi bir objenin DBMS_STATS.GATHER_*_STATS prosedürünce kullanılan varsayılan parametre değerlerini değiştirmeye izin verir. Bir tablo önceliği ayarlanmadığı veya parametre DBMS_STATS.GATHER_*_STATS komutunda açıkça ayarlanmadığı takdirdetüm parametreler varsayılan değerleri kullanır. Bu prosedür tarafından yapılan değişiklikler, prosedürün çalışması sonrasında herhangi bir yeni obje oluşturulmasını etkileyeceği gibi yeni objeler tüm parametrelerin GLOBAL_REF değerlerinide toplayacaktır.

GLOBAL_PREFS ile AUTOSTAT_TARGET olarak adlandırılan bir ilave parametrenin varsayılan değerinide değiştirmek mümkündür. Bu ilave parametre, hangi objelerin otomatik istatistik toplama görevlerince bakılacağını kontrol eder. Bu parametrenin muhtemel değerleri ALL, ORACLE, ve AUTO dir. ALL değeri, otomatik istatistik toplama görevinin veritabanındaki tüm objeler hakkında istatistik toplayacağını belirtir. ORACLE değeri, otomatik istatistik toplama görevinin Oracle’nın sahip olduğu (sys,system,vb) şemalar hakkında istatistik toplayacağını belirtir. Varsayılan değer olan AUTO ise Oracle ‘ın hangi objeler hakkında istatistik toplanacağına kendisinin karar vereceğini belirtmektedir. Sonuçta AUTO and ALL aynı işlevi sağlamaktadır.

0 yorum:

Yorum Gönder