25.11.2008

10g otomatik istatistik

Oracle optimizer tarafindan bir query'nin calistigi zaman en optimum yolu bulmak icin tablonun istatikleri dikkate alinir.

Ornek olarak

Select table_name,num_rows from user_tables;

employees 107 kayit gelmiş olsun.

Biz gun icerisinde bu employees tablosunda ciddi degisikler yapip kayit sayisini 2000000 kayida cikarip commit yaptigimizi dusunun.

tekrar yukaridaki sorgulamayi yaparsaniz tablomuzun hala 107 kayitli oldugu gozukecektir.

Aslinda select count(*) from employees yapsak 2000000 kayit donecektir.

iste bu noktada en ciddi sorun ortaya cikar yani optimizer 107 kayida gore bir plan cikarir.

bizim leventten 2 sokak yakimiza gidecegimizi dusunerek yuruyerek gitmeye karar vermemiz gibi.
Ama aslinda gidilecek yol cok daha fazla uzundur. Bu noktada yanlis plan yapilmistir belkide 10 dakikada gelebilecek sorgumuz 3 saate geri donus saglayabilir.

10 en azindan her gece otomatik istatistik alir.

bizim yapmamiz gereken statistic_level parametresini kontrol etmemiz ve basic olmamasini gormemiz gerekir.

Ama yinede gun icinde istatikde almamiz gerekir bu durumda DBMS_stats paketini kullanarak employees tablosunun istatiklerini alip dogru plani olusturmasini saglayabiliriz.