Hurriyet

15 Temmuz 2013 Pazartesi

Oracle Veritabanı: Bir Tabloda veya Tablespace'de Bulunan İndex'ler

Bir tablonun üzerinde bazen hangi index'lerin olduğunu bazen merak edebiliriz. Veritabanında yer kaplayan nesnelerle ilgili rapor yaparken bu konu ilgimi çekti. Sileceğim tabloların herhangi birisinin üzerinde index var mı yok mu, hangileri üzerinde hangi index'ler tanımlanmış, bunu öğrenmek istedim. Bunun içinde aşağıdaki gibi bir sorgu kullandım. Bununla ilgili kullandığım ana tablo dba_ind_columns idi.

  Select index_owner, table_name, index_name, column_name  
  FROM dba_ind_columns  
  Where index_owner='BERKE'  
  Order by index_owner, table_name, column_name;  


Peki invalid olan index'ler nasıl bulunabilinir?

Aşağıdaki sorgular ile hangi index'lerin invalid olduğunu bulabiliriz.

select * from dba_indexes where status ='INVALID';  
   
 select * from dba_objects where object_type='INDEX' and status ='INVALID'; 


Invalid olanları bulduktan sonra nasıl rebuild edebiliriz?

Index rebuild etmenin sorgusu görece kolaydır; ancak sorgu çalıştırılmadan önce index'in size'ı ölçülmelidir. Bu sayede index rebuild sorgumuza hem fazladan argüman koyulup koyulmaması gerektiği görülür hem de vereceğimiz sorgunun ne kadar süreceği tahmin edilebilinir.

alter index  rebuild online;;  
   
 veya   
   
 alter index  rebuild;  


Index'ler ne zaman rebuild edilmelidir, nelere dikkat edilmelidir?

Index'ler genellilkle yeni data'lar eklendiğinde veya data'lar silindiğinde değişikliklerin etki etmesi için rebuild edilmelidir.

Buna istinaden yine index performansı düşük olanlara ve büyük dml işlemleri yapılan tablolardaki indexlere rebuild işlemi uygulanır.

Index Rebuild Performansı

Index'lerde rebuild edilmeden önce index size'ına bakılmalıdır; çünkü büyük index'ler rebuild edildiğinde uzun süre database resource'u tüketebilir.

select segment_name,(bytes)/1024/1024 as "MB",(bytes)/1024/1024/1024 as "GB" from dba_segments where segment_type='INDEX' order by "MB" desc; 

Eğer büyük index'ler rebuild edilmek isteniyorsa NOLOGGING argümanıyla çalıştırılmalıdır.

Ayrıca index'ler PARALLEL argümanıyla çalıştırılırlarsa çalıştırılma performansı artar, index rebuild hızlanır.

Index Monitoring:

Index monitoring ile bir index'in kullanılıp kullanılmadığını bulabiliriz. Her ne kadar index monitörleme işi ile database üzerine bir yük eklesek de kullanılmayan index'leri bulup silmek bize yer kazandırabilir.

Monitor başlatma ve bitirme:

 ALTER INDEX indexa MONITORING USAGE;  
 ALTER INDEX indexa NOMONITORING USAGE;  

Monitörlenen index'leri bulma:

 SELECT index_name,  
     table_name,  
     monitoring,  
     used,  
     start_monitoring,  
     end_monitoring  
 FROM  v$object_usage  
 WHERE index_name = 'indexa'  
 ORDER BY index_name; 

Referans:
http://richardfoote.wordpress.com/category/index-rebuild/
http://jonathanlewis.wordpress.com/2009/06/05/online-rebuild/
http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm#ADMIN11722
http://www.dba-oracle.com/t_scheduling_oracle_index_rebuilding.htm
http://www.dba-oracle.com/t_index_rebuilding_issues.htm
http://www.oracle-base.com/articles/10g/index-monitoring.php

Hiç yorum yok:

Yorum Gönder