01. Önizleme
Öncelikle aşağıda bulunan 1. sorgu çalıştırılıp genel bir ön izleme yapılması gerekmektedir. Ön izleme neticesinde yüksek değerler ile karşılaşıyorsanız 2. ve 3. aşamalara geçiş yapabilirsiniz.
02. Analiz
Bu aşamada Analiz yapılarak gerekli olan sorgulara ait çıktılar oluşturulur. 2. aşama herhangi bir işlem yapmaz sadece size kullanmanız gereken sorguların listesini oluşturmaktadır.
03. İşlem
İkinci aşamanın sonucunda elde ettiğiniz sorguların tamamını çalıştırarak index sayfalarınıza ait gerekli tüm düzenlemeleri yapabilirsiniz.
- Aşama
Bu aşamada yapmanız gereken işlem aşağıdaki sorguyu Mikro veritabanlarında çalıştırıp MSSQL INDEX leri ile ilgili bir önizleme yapmaktır. Bu ön izleme neticesinde yüksek değerler ile karşılaşıyorsanız 2. aşamadaki işlemleri yapmanız gerekmektedir.
SELECT
MetinOktay.object_id,
SysINDEX.name as IndexName,
OBJECT_SCHEMA_NAME(MetinOktay.object_id) as ObjectSchemaName,
OBJECT_NAME (MetinOktay.object_id) as ObjectName,
MetinOktay.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') MetinOktay
INNER JOIN sys.indexes SysINDEX ON SysINDEX.object_id=MetinOktay.object_id and SysINDEX.index_id=MetinOktay.index_id
WHERE avg_fragmentation_in_percent > 5 AND MetinOktay.index_id > 0
ORDER BY avg_fragmentation_in_percent desc
2. Aşama
Bu aşamada ise aşağıdaki 2 tane sorguyu çalıştırarak Rebuild ve Reorganize işlemlerini yapmanızı sağlayacak SQL sorgularını oluşturabilirsiniz.
Rebuild Sorgusu
Declare
@MetinOktay int = 1,
@MetinOktay2 nvarchar(255),
@index_id int,
@index_adi nvarchar(255),
@tablo_tipi nvarchar(255),
@tablo_adi nvarchar(255),
@index_yogunluk nvarchar(255)
While
@MetinOktay <= (
Select COUNT(MetinOktay.object_id) From sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') MetinOktay
INNER JOIN sys.indexes SysINDEX ON SysINDEX.object_id=MetinOktay.object_id and SysINDEX.index_id=MetinOktay.index_id
WHERE avg_fragmentation_in_percent > 30 AND MetinOktay.index_id > 0)
Begin SET @MetinOktay2 = 'ALTER INDEX ' + @index_adi + ' ON ' + @tablo_adi + ' REBUILD PARTITION = ALL WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, ONLINE = OFF, SORT_IN_TEMPDB = OFF )
'
print @MetinOktay2
SELECT TOP (@MetinOktay)
@index_id=MetinOktay.object_id ,
@index_adi=SysINDEX.name ,
@tablo_tipi=OBJECT_SCHEMA_NAME(MetinOktay.object_id),
@tablo_adi=OBJECT_NAME (MetinOktay.object_id),
@index_yogunluk=MetinOktay.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') MetinOktay
INNER JOIN sys.indexes SysINDEX ON SysINDEX.object_id=MetinOktay.object_id and SysINDEX.index_id=MetinOktay.index_id
WHERE avg_fragmentation_in_percent > 30 AND MetinOktay.index_id > 0
ORDER BY avg_fragmentation_in_percent desc
Set @MetinOktay += 1
END
Reorganize Sorgusu
Declare
@MetinOktay int = 1,
@MetinOktay2 nvarchar(255),
@index_id int,
@index_adi nvarchar(255),
@tablo_tipi nvarchar(255),
@tablo_adi nvarchar(255),
@index_yogunluk nvarchar(255)
While
@MetinOktay <= (
Select COUNT(MetinOktay.object_id) From sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') MetinOktay
INNER JOIN sys.indexes SysINDEX ON SysINDEX.object_id=MetinOktay.object_id and SysINDEX.index_id=MetinOktay.index_id
WHERE avg_fragmentation_in_percent < 30 AND MetinOktay.index_id > 0)
Begin SET @MetinOktay2 = 'ALTER INDEX ' + @index_adi + ' ON ' + @tablo_adi + ' REORGANIZE WITH ( LOB_COMPACTION = ON )'
print @MetinOktay2
SELECT TOP (@MetinOktay)
@index_id=MetinOktay.object_id ,
@index_adi=SysINDEX.name ,
@tablo_tipi=OBJECT_SCHEMA_NAME(MetinOktay.object_id),
@tablo_adi=OBJECT_NAME (MetinOktay.object_id),
@index_yogunluk=MetinOktay.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') MetinOktay
INNER JOIN sys.indexes SysINDEX ON SysINDEX.object_id=MetinOktay.object_id and SysINDEX.index_id=MetinOktay.index_id
WHERE avg_fragmentation_in_percent < 30 AND MetinOktay.index_id > 0
ORDER BY avg_fragmentation_in_percent desc
Set @MetinOktay += 1
END