Bir index hangi durumlarda rebuild yapılmalıdır ?
Oracle veritabanlarında , zamanla indeksler fragmante olmakta ve ciddi performans sorunlarına yol açmaktadır.İndekslerin düzenli olarak kontrolü ve gerekiyorsa da rebuild edilerek düzenlenmesi gerekmektedir.
Bir indeks için rebuild işleminin gerekip gerekmediği tespit edilebilir.
Öncelikle ilgili index hakkında bilgi edinmek gerekiyor. Bunun için indeksin analizlenmesi gerekmektedir. Bu işlemi aşağıdaki komut ile yapabilirsiniz.
SQL> analyze index ADURUOZ.IX_DENEME validate structure;
Index analyzed.
Analiz işlemi , “sys.index_stats” tablosunu doldurur. Bu tablonun sadece bir satır içerir ve bu nedenle bir kerede yalnızca bir indeks analiz edilebilebilir. Analiz yapılan oturumda , sys.index_stats tablosundan ilgili indeks ile ilgili bilgiler alınabilir.
SQL> select del_lf_rows,lf_rows,height,lf_rows,lf_blks from sys.index_stats;
DEL_LF_ROWS LF_ROWS HEIGHT LF_ROWS LF_BLKS
----------- ---------- ---------- ---------- ----------
842 41356545 3 41356545 109441
Analiz sonrasında “sys.index_stats” tablosundaki veriler doğrultusunda , aşağıdaki durumlardan herhangi biri oluşursa , ilgili indeks için rebuild ya da yeniden oluşturulması gereklidir denilebilir.
- Silinen satırların yüzdesi toplamın %30’unu aşıyor ise. Yani sys.index_stats tablosunda değerlerden del_lf_rows / lf_rows > 0.3 ise.
- Eğer ‘HEIGHT’ değeri 4’ten büyük ise.
- Eğer indeksteki satır sayısı olan LF_ROWS , LF_BLKS değerinden çok daha az ise . Bu durum, indeksten çok fazla kayıt silindiğinin göstergesidir.
Bu koşullardan biri oluştuğunda indeksi aşağıdaki gibi rebuild yapabilirsiniz.
SQL> alter index ADURUOZ.IX_DENEME rebuild online;
Index altered.