İndexlerler ilgili genel problemler:

– Yetersiz indexler
– Çok fazla indexler
– Yanlış tip indexler
– Çok büyük indexler

Indexlere ihtiyaçımız olduğunu nasıl anlayabiliriz.

– Query dönüş hızınız düşükse
– Çok fazla full table scan varsa
– db file scrattered read sayısı fazla ise
– Çok fazla fiziksel okuma çok az logical okuma varsa
– Buffer busy wait eventleri fazla ise
– Çok fazla temporary alan kullanılıyorsa

Yetersiz indexleri nasıl düzeltiriz

– Query analiz edip full table scanlare bakarız
– Hash ve sort merge joinleri incereliz
– Full table scan yapan tablolardaki indexlerimiz olup olmadığını kontrol ederiz.
– yeni index yaratırız.

Çok fazla indexler hangi problemlere yol açar

– Yavaş yapılan insert update ve delete işlemlerine
– Hangi indexin kullanılacağına karar verilmemesine
– Çok fazla fiziksel yazma işlemine
– uzun parse sürelerine

Örnek seneryo

Bir tablomuz var bu tablomuzda 5 adet bitmap index,1 adet primary key ve lookup index bulunuyor.950.000 kayıdı bu tabloya insert süresi 35 dakika sürüyor.

Çözüm.

insex monitorin yaparak hangi indexlerin kullanduğını görürüz. V$sql_plan bakarak execution planı inceleriz ve kullanılmayan indexlere drop ederiz.

Sadece primary key index kalır. 950.000 kayıt ekleme süresi 1.5 dakikaya iner.

Eğer elimizdeki indexler full table scan neden oluyor yada uzun parse zamanı ortaya çıkıyorsa yada skip scan meydana geliyorsa indexlerimizin doğru olduğunu söylememiz mümkün değildir.

Gerekli index tipleri

– 10g database datawarehouse işlemleri için bitmap join indexleri FK kolonlarda tercih edelim.
– 9i DWH işlemlerdinde concat btree indexler olabilir.
– OLTP işlemlerinde bitmap indexler extra yoğun lock sorununa yol açar.
– Full table scan yapılıyorsa function base index kullanmayalım.

Çok üyük indexler yol açtığı problemler.

– Çok fazla db sequential read problemi
– Çok fazla fiziksel IO
– Çok fazla logical IO

Yarında yazıma özel index tipleri ile devam edeceğim.