Mssql Server Redundant Index

Bu makalede mssql server üzerinde bulunan redundant index konusunu detaylı bir şekilde görmüş olacağız.

Redundant (yedekli/gereksiz) index’ler, birbirini tekrar eden veya aynı işlevi gören index’lerdir. Örnek vermek gerekirse ilk indexste sadece A kolonu varsa ikinci index yapısında A kolonunun yanında B kolonunda tanımlanması burada oluşturulan ilk indexsin gereksiz olduğunu göstermektedir. Aynı kolon sıralamasına sahip birden fazla index yapısının redundant index yapısı olarak geçmektedir.

Gereksiz index’ler disk alanını boşa harcamaktadır. Her insert, update ve delete işleminde tüm index’ler güncellenmektedir. Bu yapı bizlere performans anlamında ciddi kayıplar oluşturmaktadır. Ayrıca rebuild ve reorganize işlemlerinin daha uzun sürmesine sebep olacaktır. Fazla gereksiz bulunan her index query optimizer tarafından daha çok plan değerlendirmesine sebep olacak buda performans anlamında bizleri etkileyecektir.

aşağıdaki komut veritabanı altında bulunan Redundant Index olan index yapılarını göstermektedir.

use DB_NAME
;with ind as (
    select  a.object_id
    ,       a.index_id
    ,       cast(col_list.list as varchar(max)) as list
    from    (
            select  distinct object_id
            ,       index_id
            from    sys.index_columns
            ) a
    cross apply
            (
            select  cast(column_id as varchar(16)) + ',' as [text()]
            from    sys.index_columns b
            where   a.object_id = b.object_id
                    and a.index_id = b.index_id
            for xml path(''), type
            ) col_list (list)
)
select  object_name(a.object_id) as TableName
,       asi.name as FatherIndex
,       bsi.name as RedundantIndex
from    ind a
join    sys.sysindexes asi
on      asi.id = a.object_id
        and asi.indid = a.index_id
join    ind b
on      a.object_id = b.object_id
        and a.object_id = b.object_id
        and len(a.list) > len(b.list)
        and left(a.list, LEN(b.list)) = b.list
join    sys.sysindexes bsi
on      bsi.id = b.object_id
        and bsi.indid = b.index_id

Yukarıdaki resimde ilgili tablo için oluşturulan iki index yapısında kolonlarının benzer olduğunu Redundant index ve father index kolonlarıyla görmekteyiz. İlgili kolonlara baktıktan sonra daha kapsamlı olan index yapısının FatherIndex olarak kabul edildiğini görmekteyiz. Aşağıdaki resimde dikkat edersek Redundant index’in daha az kapsamlı olduğu görülmektedir.

Makalenin başında belirtmiştik Redundant index yapısını performans anlamında disk üzerinde kapladığı alan bakımından sıkıntı yaşayabileceğimizi söylemiştik. Redundant index yapısının Disable veya drop edilmeden önce bu index yapısının kullanılıp kullanılmadığını görmemiz gerekiyor. Bunun için sayfamızda ilgili makale ile Redundant index olarak adlandırılan index’in kullanılıp kullanılmadığını görmemiz gerekmektedir.

Yukarıda verilen linkten Redundant index yapısını kullanılıp kullanılmadığına bakılır. Eğer index yapısı kullanılmıyorsa ilgili index disable veya drop edilir.

İndex yapısı non clustered index ise disable edilen index’ler diskte yer kaplamaz. Sadece metadata bilgileri tutulmaktadır. Bu sebepten ilgili index’in tekrardan oluşturulması gündeme gelirse rebuild işlemi gerçekleştirmeniz yeterli olacaktır.

Tablo altında bulunan index bölümünde ilgili index yapısını görünmesini istemiyorsanız DROP komutu ile ilgili index yapısını silebiliriz.

Aşağıdaki komut ile mevcut index yapısını disable edebiliriz.

ALTER INDEX INDEX_NAME ON TABLO_NAME DISABLE

Aşağıdaki komut ile index yapısını drop edebiliriz.

DROP INDEX INDEX_NAME ON TABLO_NAME 

Drop ve Disable işlemi yapıldıktan sonra sayfamızda bulunan ilgili makale ile ana indexsimizin kullanılıp kullanılmadığı takip edebiliriz.

Yukarıdaki index kaldırma işleminde dikkat edeceğimiz başka bir konu Primary Key ve Unique Constraint index’lerinin kaldırılmamalıdır. Foreign Key ilişkileri için kullanılan index’leri dikkatle incelenmesi gerekmektedir.

Bu makalede Redundant index yapısını detaylı bir şekilde görmüş olduk. Başka makalede görüşmek dileğiyle..

Allah’ın mescidlerini, yalnızca Allah’a ve ahiret gününe iman eden, namazı dosdoğru kılan, zekatı veren ve Allah’tan başkasından korkmayanlar onarabilir. İşte, hidayete erenlerden oldukları umulanlar bunlardır. Tevbe Suresi, 18. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir