Bu yazımda Oracle Database 10g ‘yle birlikte kullanıma sununlan cost-based optimizer (COB) hakkında işinize yarayacak bazı bilgiler vermek istiyorum. Cost-based optimizer uygulamasının asli görevi SYS ve SYSTEM şemasında yer alan bilgilerin (Data Dictionary) istatistiğinin tutulmasını sağlamaktır. Data dictionary (aynı zamanda metadata repository olarakta isimlendirilir) ‘nin içeriğini bilmeyenler için kısaca açıklamak gerekirse, bu alan sadece okunabilir (read-only) tablolardan oluşan ve veritabanınız hakkındaki tüm “tanım” bilgilerin tutulduğu bölümdür. Veritabanınızdaki kullanıcıların oluşturduğu tabloların kayıtları, kullanıcı izinleri, sinonimler, viewlar vs tüm tanımla burada tutulur. Çoğunuzunda tahmin edebileceği gibi data dictionary datası SYSTEM tablespace ‘nde saklanır. O nedenle SYSTEM tablespace ‘nin zarar görmesi durumunda veritabanı işlevselliğinin yitirir. Bu konuda hakkında daha detaylı bilgiyi buradanalabilirsiniz.
Data dictionary ‘nin istatistiğinin alınması konusuna geri dönersek eğer, bu alanda yapılacak olan sorgulamaların hızlı olması en az kullanıcı tablolarının istatistiğinin alınması kadar önemlidir. Örnek olarak, veritabanınızda kullanmakta olduğunuz bir tabloda yüzlerce partition olduğunu varsayalım. Bu tabloya bir select sorgusu gönderildiğinde sonucunu almak istediğiniz datanın bulunduğu partition ‘ın hangisi olduğu ve bu partition ‘ın ne kadar kısa sürede yerinin tespit edilmesi data dictionary istatistiğinin güncel olmasına bağlıdır.
Data dictionary ‘nin istatistiğini iki farklı metodla alabiliriz. Aşağıdaki PL/SQL kodlarını kullanarak veya direkt Sqlplus ‘dan begin/end satırlarını silip başına “exec” ibaresini ekleyerek çalıştırabilirsiniz. İstatistik alırken dikkat etmeniz gereken konu istatistik sonucunda bir histogram oluşturulmasıdır. Bu histogram ‘ın oluşturulması için komut içersinde mutlaka “Gather Auto” opsiyonu verilmelidir.
begin
dbms_stats.gather_dictionary_stats(options=> 'GATHER AUTO');
end;
veya
begin
dbms_stats.gather_schema_stats (ownname=> 'SYS' ,options=> 'GATHER AUTO');
end;
Konuyu sonuca bağlarsak, data dictionary ve user tablolarına ait datanın haftatada en az bir defa istatistiğinin alınması siz hiç müdahele etmenseniz dahi otomatik olarak çalışan Oracle advisor (Memory Advisors, SQL Advisors, Segment Advisor) uygulamalarının daha akıllıca kararlar vermesini sağlayacaktır.