Indexlerin Fragmentation  Nedir ve Fragmentation  Oranlarını Bulma

Bu makalede index fragmentation yapısına değinmiş olacağız. Öncelikle index yapıları neden fragmentation olur. Kullanıcılar tabloya insert update ve delete işlemleri sonucu index yapımızın olduğu ilgili page içerisinde alan kalmayabilir. Bunun için sql server page yapımıza sığmayan yeni değerler farklı bir page üzerinde durmaktadır. Buda verilerimizin dağınık bir şekilde durmasına ve index yapımızın bozulmasına sebebiyet verecektir. Bu yapının önlenmesi için fill factor operatörünün kullanılması gerekmektedir.

Fill factor nedir değinmek gerekirse; kullanıcı index yapımızın olduğu tablolara insert işlemi gerçekleştirdikten sonra index yapımızın olduğu page’lerde yer olmayınca yeni bir page açılır yeni değerler buraya kaydedilir. Bu yapınında index yapımızı bozduğunu söylemiştik. Bunun için fill factor ayarlaması yapılınca index’lerimizin olduğu her page’de  belirlemiş olduğunu yüzdelik değerle boş bir alan bırakıyoruz. Buda sonradan eklenecek insert ifadelerin boş olan page kısmına yazılması sağlanacak index yapılarımızın fragmentation gecikmiş olacaktır. Düzenli olarak indexleri rebuild ya da reorganize edecek bir job oluşturmalısınız.

Örneğin fill factor’ü %90 olarak set ederseniz Leaf Level page’lerin %90’unu doldurur ve %10’unu boş bırakır. Bu şekilde leaf level page’e kayıt eklemek istediğinde yeterli boş alanı bulur ve index’in diskte dağılması problemini geciktirmiş olur. Fill Factor ‘u index’inizin fragmante olma hızına göre set edebilirsiniz.

Fill factor, create rebuild işlemlerinde belirlenebilirken ssms arayüzündende belirlenebilir.

Bu yapı ne kadar boş alan olarak görülsede page boyutunu arttırtacaktır.

Not: Index’i create ya da rebuild ederken fill factor belirlemişsek birde pad_index=on seçeneğini kullanabiliriz. Pad_index’i aktif edersek fill factor ile leaf level page’lerin sonuna konan oran kadar boşluk intermediate level page’lere de konulur. Ama performans anlamında çok bir önem arz ettiğini söyleyemem.

Fill factor ilgili indexs üzerinde manuel ayarlandığı gibi ssms arayüzündende ayarlanabilir.

Yukarıda resimde dikkat edersek rebuild işleminde veya reorganize işlemlerinde pad index ifadesini true veya on yapabiliriz.

İnstance üzerinde properties ekranıdan fill factor değeri genel olarak ayarlanabilir

Aşağıdaki sorgu veritabanı altında bulunan belirtilen tablo ve tablo altındaki index fragmentation oranlarını  artandan azalan yapıya doğru vermektedir. Aynı index page count değerlerini vermektedir.

SELECT 
		dbschemas.[name] as 'SchemaName', 
		dbtables.[name] as 'TableName',
		dbindexes.[name] as 'IndexName', 
		indexstats.avg_fragmentation_in_percent,
		indexstats.page_count

FROM 
		
		sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'LIMITED') AS indexstats
		INNER JOIN sys.tables dbtables on dbtables.object_id = indexstats.object_id
		INNER JOIN sys.schemas dbschemas on dbtables.schema_id = dbschemas.schema_id 
		INNER JOIN sys.indexes AS dbindexes ON dbindexes.object_id = indexstats.object_id
		AND indexstats.index_id = dbindexes.index_id 

WHERE indexstats.database_id = DB_ID() and --dbtables.[name]='Address' and
		indexstats.avg_fragmentation_in_percent >=0

ORDER BY indexstats.avg_fragmentation_in_percent desc
GO

dbtables.[name]=’Address’ kısmı yorum satırı olarak değiştirilirse veritabanı altında bulunan tüm tablolar için sonuç dönmektedir. Sadece tablo ismi belirtilmesi yeterli aynı tablo ismindeki tüm schema’larımız dönmektedir.

Aşağıdaki sorgu veritabanı altında bulunan tüm tablo ve tablo altındaki index fragmentation oranlarını artandan azalan yapıya doğru vermektedir. Aynı zamanda index page count sayısını vermektedir.

select dbschemas.name as SemaAdi,t.name AS TabloAdi,  i.name AS IndexAdi,avg_fragmentation_in_percent,page_count
from sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,NULL) ips
join sys.tables t on ips.object_id=t.object_id
INNER JOIN sys.schemas dbschemas on t.schema_id = dbschemas.schema_id 
join sys.indexes i on ips.object_id=i.object_id and ips.index_id=i.index_id
order by avg_fragmentation_in_percent desc

Bu makalede Indexs’lerin fragmentation oranlarını nasıl senaryolar yapılması gerektiğini görmüş olduk. Başka bir makalede görüşmek dileğiyle..

Gerçekten Allah’ın Kitab’ını okuyanlar, namazı dosdoğru kılanlar ve kendilerine rızık olarak verdiklerimizden gizli ve açık infak edenler; kesin olarak zarara uğramayacak bir ticareti umabilirler. Fatır Suresi, 29. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

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