10 Haziran 2011 Cuma

Oracle 11gR1 ve Function Based Index

Selamlar,

Bugün karşılaştığım bir hata ile ilgili yazmak istiyorum. Bir müşterimizin veritabanı versiyonu 11gR1 (11.1.0.7) ve birkaç sorgudaki yavaşlık problemi üzerine SQL tuning ile uğraşıyordum. Sorguların yüklem kısmında (WHERE koşulu ya da predicate) bir string concat işlemi yapıldığını ve index kullanımının partition'lar üzerinde devre dışı kaldığını gözlemledim. Zaman bilgisi ile concat işlemini içeren kolonlarla bir composite index oluşturdum, yani bir function based index. Sorgunun maliyetini yeniden kontrol ettiğim zaman kazanç oldukça tatmin ediciydi ve yarım saate yakın süren ilgili sorgu 2 saniyeye kadar düşmüştü.

Bu optimizasyon çalışmasının ardından üçüncü parti bir ürün aracılığı ile sorguyu denedim. Sonuç gelmeyince nedenini araştırmak üzere alert.log dosyasına baktım ve ORA-7445 ve ORA-600'lerle dolmuş taşmış bir alert.log dosyası gördüm. Bug'ları ve internal error'leri görünce hemen metalink'e baktım şu id'li notu gördüm:


Bug 8682138: PSRC: ORA-7445 [QEAECNT] OR ORA-600 [9999] OCCURS, EXECUTING CERTAIN SQL

Platform HP-UX ve Oracle Veritabanı 11gR1 kullanıyorsa bu şekilde bir hata meydana gelebiliyormuş. 8682138 numaralı Bug'ın en büyük karakteristiği ise function based index'lerin kullanılıyor olmasıymış. Yarattığım function based index'lerin sonuna "compute statistics" eklediğim için CBO, ilgili sorgu için bu index'leri hemen kullanmaya başlamış ve doğru olanı da yapmış olmasına rağmen bu hataları aldım.

SR açılması şart olan bir durum ve function based index'i kaldırdığım zaman performansın eskisi gibi kötü olduğunu gördüm.

İyi çalışmalar.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan