Sayfa sayısı <1000 olan dizinleri neden yeniden oluşturmuyorsunuz?


17

Dizin bakımı için Ola Hallengrens betiğini kullanıyorum. Bunu yapmadan önce, hangi dizinleri en çok parçalanmış görmek için aşağıdaki sorguyu kullandım:

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 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
ORDER BY indexstats.avg_fragmentation_in_percent desc

Benim durumumda, avg_fragmentasyon 15 dizin için % 70'in , 28 dizin için % 30'un üzerindeydi .

Bu yüzden her endeksi Ola Hallengren'in çözümünü kullanarak yeniden inşa ediyorum. Sorguyu tekrar çalıştırdığımda, sonuç buydu:

12 indeks için % 70'in üzerinde , 15 endeks için % 30'un üzerinde parçalanma .

Bunun sebebi, page_counthala çok parçalanmış olan her bir indeks için 1000'den daha düşük olması nedeniyle olduğunu düşündüm . Örneğin, page_count 967 değerine sahip dizinlerden birinin parçalanma yüzdesi % 98,98'dir ! Bana göre, bu endeksi yeniden oluşturmaya değer! Yaptım ve daha sonra parçalanma % 0 idi . Ayrıca, bir indeks page_count132 gitti % 95 ile % 0

Yani, sorum şu, bu dizinleri yeniden oluşturmak DEĞİL ne sebepleri olurdu? Bunun bir nedeni, yeniden inşa etmenin zamana ve kaynaklara mal olması olabilir, ancak endeksler küçük olduğu için, bu nispeten az kaynağa mal olduğu anlamına gelmez ve yine de yeniden inşa etmenin faydası olmaz mı?

Bu sitede birden çok ilgili soru var, ancak hepsi bir dizinin neden birleştirilmeyeceği veya dizinler küçükse ve bunları birleştirmezseniz hala faydalıysa sorusuna cevap verirken, burada ifade parçalanmayı azaltır, soru şu ki, neden yine de yapmıyorsunuz?


Küçük dizinlerin bellekte önbelleğe alınması muhtemeldir. Zaten IO içermeyen endeksler birleştirme işleminden yararlanamaz. Bu 1000 sayfalık sayım kuralı bir buluşsal yöntemdir.
usr

Yanıtlar:


20

Minimum sayfa sayısına ilişkin rehberlik biraz keyfi . Parçalanmayı azaltmanın en büyük faydaları:

  1. Geniş aralıklı taramalar için önceden okuma performansını artırabilir ; ve
  2. Sayfa yoğunluğunu artırabilir (sayfa başına satır sayısı)

Bu faktörlerin her ikisi de tanım gereği küçük endeksler için daha az önemlidir.

Küçük dizinleri yeniden oluşturmanın karşı argümanı aslında:

"Neden rahatsız oluyorsun? Endişelenecek daha önemli şeylerin yok mu?".

Bununla birlikte, yeniden yapılanma / yeniden yapılanma ücretsiz değildir. Bazı durumlarda fazladan çaba ve günlük oluşturma işleminden kaçınmaya değer olabilir (örneğin, günlük herhangi bir olası nedenden dolayı yansıtma, kullanılabilirlik grupları, çoğaltma ... gibi bir WAN üzerinden gönderilirse / kopyalanırsa). Ayrıca, yeniden çevrimiçi olmamanız durumunda (veya bazı durumlarda bile), yeniden oluşturma, kilitlenerek diğer eşzamanlı işlemleri etkileyebilir. Son olarak, küçük dizinler için, yeniden oluşturma, karışık uzantılardan gelen ayırmalar nedeniyle (parça izleme 1118 etkinleştirilmiş olarak çalıştırılmadıkça) yine de parçalanmayı azaltmayabilir .

Bu küçük dizinleri yeniden oluştururken hala daha mutlu hissediyorsanız ve sonuçlarına aldırmazsanız, @PageCountLevelOla'nın prosedürüne geçirilen parametrenin değerini elbette değiştirin .

Tüm ayrıntılar için Paul Randal'ın Index Fragmentation sunumundaki PASS TV kaydına bakınız.

Brent Ozar'ın SQL Server'da Index Fragmentation'ın neden önemli olmadığı hakkında konuşmasını da izlemek isteyebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.