Parçalanma Yığında Ne Demektir?
DMV'yi avg_fragmentation_in_percent
sorgulayarak sütundan aldığınız Yığındaki parçalanma değeri sys.dm_db_index_physical_stats
,
Dizinler için mantıksal parçalanma veya IN_ROW_DATA ayırma birimindeki yığınlar için kapsam parçalanması .
Ayrıca aynı BOL diyor ki:
Bu, bir yığının yaprak sayfalarındaki sıra dışı uzantıların yüzdesidir. Sıra dışı bir kapsam, bir yığın için geçerli sayfayı içeren kapsamın, bir önceki sayfayı içeren kapsamdan sonraki fiziksel kapsamdan sonraki boyuttur.
Ne olduğunu görebilirsiniz Yani Heap ayrılan sayfalarda boş alan mevcut değil ancak sayfaların değişen dizisi parçalanması oluşturur.
Bu küçük testlerle kanıtlanabilir. Bir Yığın Tablosu oluşturalım ve içine bazı kayıtlar ekleyelim ve sonra parçalanmayı kontrol edelim.
create table dbo.HeapTest
(
Id INT not NULL Default (1),
Col1 char(5000) Not null Default ('Heaps Are Cool')
)
SET NOCOUNT ON
Insert into dbo.Heaptest default values
go 50
select index_type_desc,avg_fragmentation_in_percent,fragment_count,
avg_page_space_used_in_percent,record_count
from sys.dm_db_index_physical_stats(db_id(),object_id('dbo.HeapTest','U'),0,default,'detailed')
Öyleyse, Yığın tablosu içinde 50 kayıt ile oluşturulur. DMV sys.dm_db_index_physical stats sorgusu sonrasında parçalanma nasıl görünüyor
avg_fragmentation_in_percent
Sütun değerinin% 33 olduğunu görebilirsiniz . Şimdi sayfaların nasıl düzenlendiğini görelim. Bu, belgesiz sorgu kullanılarak yapılabilir %%lockres%%
. Sorgu,
SELECT %%lockres%%, * FROM dbo.HeapTest;
Ve aşağıda çıktı nasıl görünüyor. Sadece ilgili kısmını takmak. Sorgu, dbo.HeapTest tablonuza 50 satır eklediğimizden beri 50 satır üretti.
Söylediği şey, ilk sayfanın kimliği 197
, sonraki sayfanın kimliği, 242
sonraki sayfaların sayfa kimliğine ulaşana kadar sürekli kimliğe sahip olmasıdır, 264
çünkü bundan sonra sayfa kimliği alırız 280
. Yani sayfa kimlik numaralarındaki bu sıçrama aslında parçalanmaya neden olan şeydir.
Şimdi öbeği yeniden inşa edelim ve çalıştıralım. Parçalanma elde ettik
Şimdi parçalanma olduğunu görebilirsiniz 14%
.
Ayrılan sayfa numaralarını görelim
Tüm sayfalara seri olarak tahsis edilen tek bir atlama geri kalanımız var . Sadece bir sıçrama parçalanması önemli ölçüde azaldığı için.
Yığını yeniden inşa ediyorum ve şimdi parçalanmayı kontrol ettiğimde tamamen gitti. Ve sayfa kimliği ayırma
Parçalanma Neden Artırıldı
Şimdi, parçalanmanın yükselmesine neyin sebep olabileceğiyle ilgili olarak, sayfalar öbeğe ayrılırken sürekli olmayacaklardı, çünkü parçalanma değerinin artmasına neden olanın, sayfalara ayrılan SAYFA KİMLİĞİ'ndeki sıçrama olduğunu gördünüz.
Kafanın arkasında, HEAP için parçalanma kelimesinin herhangi bir anlamı olmadığını, sıralanmamış sayfalar için parçalanmayı nasıl tanımlayacağınızı da aklınızda bulundurmalısınız.
Parçalanma konusunda gerçekten endişeli
Gerçekten, yığın tablosunun parçalandığı ve sorguları yavaşlattığı bir senaryo ile karşılaşırsanız, tabloyu yeniden oluşturmaktan ziyade kümelenmiş bir dizin oluşturmak daha iyi olur. Nedeni öbek yeniden oluşturduğunuzda, altında yatan tüm kümelenmemiş dizinler de yeniden oluşturma işleminin çok daha uzun zaman almasına neden olur, çok fazla kaynak kullanır ve işlem günlüğü şişirir. Bir üretim sisteminde her zaman bundan kaçınmaya çalışır. Pavlus bunu Myth Bölümü'nde yığınla ilgili olarak ele aldı .
Not: Lütfen üretim sisteminde belgelenmemiş komut kullanmayın. Bu sadece gösteri içindi.