Dynamics Crm İndex Rebuild ve Reorganization

Dynamics CRM bildiğiniz üzere Microsoft SQL veritabanı üzerinde çalışmaktadır. SQL veritabanı üzerinde çalışan programların daha efektif çalışabilmesi için oluşturmuş olduğumuz tablolarda indexleme çalışması yapmaktayız. Dynamics CRM index çalışmalarını bizim için kendi varlıkları üzerinde otomatik olarak yapmaktadır. Özel olarak oluşturduğumuz varlıklarda ise ihtiyaca göre biz kendimiz index eklemekteyiz. Dynamics Crm index rebuild ve reorganization işlemleri sistem performansı için belli aralıklar ile yapılmalıdır.

Konu indexlere geldiğine göre SQL index nedir ve index nasıl oluşturulur başlıklı yazıya bir göz atmanızda fayda var diye düşünüyorum.

Microsoft Dynamics Crm İndex Fragmantetion ve Page Count

SQL veritabanındaki tablolara yeni veriler eklendikçe ve eski veriler silindikçe tablolardaki index yapısı geçerliliğini yitirmektedir. Hangi tablodaki indexlerin geçerliliğini kaybettiğini anlamak için aşağıdaki SQL sorgusunu çalıştırmak gerekmektedir:

SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats 
INNER JOIN sys.tables (nolock) dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas (nolock) dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes (nolock) ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID()
ORDER BY indexstats.avg_fragmentation_in_percent desc

Yukarıdaki sorgu ile indexlerin fragmantasyon bilgisine göre indexleri sıralamaktayız. Bu değer bize indexin bozulma oranını göstermektedir. Fragmantasyon değeri arttıkça indexteki bozulma oranı da artmaktadır. 0-40 arası kabul edilebilir bir değer olabilir ancak 40 üstü kesinlikle bize bozulmanın çok fazla olduğunu söylemektedir.

Sorguda karşımıza çıkan bir diğer değer ise pagecount değeridir. Index ile ilişkilendirilmiş verilerin sayısı ne kadar fazla ise pagecount değerimiz de o kadar fazladır. SQL bu verileri sayfalara bölerek tutmaktadır.

Microsoft Dynamics Crm İndex Rebuild ve Reorganization

SQL veritabanında bozulan indexleri yeniden derlemek için Microsoft Dynamics Crm ile birlikte gelen p_ReindexAll adındaki stored procedureünü kullanmaktayız. Bu stored procedureün aşağıdaki parametreleri çalışmak için almaktadır:

exec [p_ReindexAll] AllIndexTypes, MaxRunTime, FragRebuildPctHigh, FragRebuildPctLow, MinPages, MinPages, Online

AllIndexTypes: Bu parametreye 0 değeri vererek prosedürün sadece Clustered indexler için çalışmasını sağlıyoruz. 1 değeri vererek Clustered ve Non Clustered indexler için çalışmasını sağlıyoruz.
MaxRunTime: Saniye cinsinden işin maksimum çalışma süresidir. Null verildiği zaman işlem tüm indexler için çalışacaktır.
FragRebuildPctHigh: Verilen değerden yüksek bozulması olan indexleri rebuild ediyor.
FragRebuildPctLow: Verilen değerden yüksek bozulması olan indexleri rebuild ediyor.
MinPages: Pagecountu verilen değerin üstünde olan indexler işleme alınacaktır.
Verbose: Çalışma sonucu döndürülen mesajdır.
Online: İndex düzenlerken indexe erişimin kapatılıp kapatılmayacağını belirtir.

Stored procedure çalışmasını tamamladıktan sonra bize 4 farklı sonuç değeri döndürebilmektedir. Bunlar:

0: Başarıyla prosedür çalışmasını tamamladı.
1: Bazı indexler için rebuild işlemi tamamlanamadı.
2: İndexler için rebuild işlemi tamamlandı ama istatistikler güncellenemedi.
5: Parametrelerde hata var.

İndexleri güncelledikten sonra sp_updatestats prosedürü ile istatistikleri güncellemek size performans açısından artış sağlayabilir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir