Değerli Dostlar,
Oracle veri tabanı her yeni sürümle birlikte bizlere hayatı daha da kolaylaştıracak bir takım özellikleri sunmakta. Bu yazımızda öncelikle veri tabanı tarafında daha sonra işletim sisteminde otonom veri tabanı ilkesi hareket eden Oracle’ın biz veri tabanı yöneticilerinin işlerini kolaylaştıracak DBMS_AUTO_INDEX özelliğini tanıtacağız.
Bildiğimiz üzere her veri tabanın da verilere daha hızlı ulaşmak yada performans işlemlerinde index kavramı fazlası ile karşımıza çıkar. Index işlemleri avantajlı olduğu kadar dezavantajlıda olabilir. Doğası gereği index’ler fiziksel disk üzerinde yer kapladığı için hoyratça kullanılmaları durumda gereksiz bir alan kaplamaya ek olarak bizlere fazladan bakım gibi yükler getirebilmektedir.
Peki Oracle Automatic Indexing (DBMS_AUTO_INDEX) özelliği nasıl çalışır ?
- Öncelikle tablo ve sütünların kullanım durumuna göre aday index olarak tanımlanan ” Candidate Indexes” belirlenir.
- Güncel istatistikleri olan tablolar index işlemleri için hazırlanır. İstatistik bilgileri eski olan tablolarda otomatik index olmaz.
- Aday indexler için ( candidate indexes ) SYS_AI ön eki ile invisible indexes oluşturulur. Invisible index oluştuğu için ilk etapta sql deyimlerinde kullanılmaz.
- Çift taraflı olarak SQL performansları test edilir. Eğer SQL sorguları invisible indexler ile iyileşirse visible indexes durumuna geçilir.Bu sayede otomatik olarak oluşan indexler sql sorgularında kullanılır hale gelir.
- Invisible olarak oluşan indexler eğer sql sorgularında yeterli performansı sağlamazsa unusable index olarak işaretlenir ve sql sorgusu kara listeye alınır.
- Unusable olan index daha sonra silinerek kara listeye alınan sql sorgusunun tekrar otomatik index de kullanımı engellenir.
Oracle Automatic Indexing (DBMS_AUTO_INDEX) özelliği nasıl aktif edilir ?
Otomatik index özelliği DBMS_AUTO_INDEX prosedürünün işlenmesi ile kullanılır ve AUTO_INDEX_MODE konfig edilmesinden sonra aktif edilebilir. AUTO_INDEX_MODE aşağıdaki değerleri alabilir.
- IMPLEMENT : Otomatik index özelliğini aktif eder. Invisible olan indexler, visible index hale gelir. Optimizer tarafından kullanılabilir.
- REPORT ONLY : Otomatik index açılır fakat aday indexler invisible olarak kalır.
- OFF : Otomatik index kapatılır.
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','REPORT ONLY');
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');
Otomatik indexler varsayılan olarak tablonun bulunduğu tablespace üzerinde bulunur. Otomatik olarak oluşacak indexler için farklı bir tablespace eklemek belirlemek isterseniz.
CREATE TABLESPACE AUTO_INDEXES_TS DATAFILE SIZE 1024M AUTOEXTEND ON NEXT 200M;
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_DEFAULT_TABLESPACE','AUTO_INDEXES_TS');
Tekrar default ayara döndürmek için;
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_DEFAULT_TABLESPACE',NULL);
Oracle Otomatik index özelliği aktif edildiği zaman standart olarak bütün şemaları dahil eder. AUTO_INDEX_SCHEMA özelliğini kullanarak eklenecek yada çıkartılacak şemaları TRUE paremetresi ile belirleyebilirsiniz.
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_SCHEMA', 'KADAYIF', allow => TRUE);
Otomatik index bilgilerini görmek için
/* Auto İndex Script B.PARLAYAN */
SELECT con_id, parameter_name, parameter_value
FROM cdb_auto_index_config
ORDER BY 1, 2;
Script Çıktısı
0 AUTO_INDEX_COMPRESSION OFF
0 AUTO_INDEX_DEFAULT_TABLESPACE
0 AUTO_INDEX_MODE OFF
0 AUTO_INDEX_REPORT_RETENTION 31
0 AUTO_INDEX_RETENTION_FOR_AUTO 373
0 AUTO_INDEX_RETENTION_FOR_MANUAL
0 AUTO_INDEX_SCHEMA
0 AUTO_INDEX_SPACE_BUDGET 50
Otomatik index ile ilgili aktivitileri gözlemlemek isterseniz aşağıdaki sorgudan yararlanabilirsiniz.
SELECT DBMS_AUTO_INDEX.report_activity() FROM dual;
GENERAL INFORMATION
-------------------------------------------------------------------------------
Activity start : 23-JAN-2020 02:44:55
Activity end : 23-JAN-2020 02:44:55
Executions completed : 0
Executions interrupted : 0
Executions with fatal error : 0
-------------------------------------------------------------------------------
SUMMARY (AUTO INDEXES)
-------------------------------------------------------------------------------
Index candidates : 0
Indexes created : 0
Space used : 0 B
Indexes dropped : 0
SQL statements verified : 0
SQL statements improved : 0
SQL plan baselines created : 0
Overall improvement factor : 0x
-------------------------------------------------------------------------------
SUMMARY (MANUAL INDEXES)
-------------------------------------------------------------------------------
Unused indexes : 0
Space used : 0 B
Unusable indexes : 0
-------------------------------------------------------------------------------
ERRORS
---------------------------------------------------------------------------------------------
No errors found.
---------------------------------------------------------------------------------------------
Bir yazımızın daha sonuna geldik. Otomatik index kavramını hakkında daha detaylı bilgi isterseniz benimde yararlandığım aşağıdaki kaynakları inceleyebilirsiniz.