Bir yığın üzerinde sıkıştırma


14

Aşağıdaki Microsoft Docs bir paragraf :

Bir yığın içinde DML işlemlerinin bir parçası olarak atanan yeni sayfalar, yığın yeniden oluşturuluncaya kadar PAGE sıkıştırmasını kullanmaz. Sıkışmayı kaldırarak ve yeniden uygulayarak veya kümelenmiş bir dizin oluşturarak ve kaldırarak yığını yeniden oluşturun.

Neden böyle olduğunu anlayamıyorum. Belirtilen sıkıştırma ayarına sahip bir yığınım varsa, neden tabloya ait bir sayfaya uygulanmaz?

Teşekkürler

Yanıtlar:


12

Farklılıklardan sorumlu olan belirli iç mekanizma (lar) ı bilmese de, Yığınların Kümelenmiş Endekslerden (ve muhtemelen de Kümelenmemiş Endekslerden) biraz farklı yönetildiğini söyleyebilirim:

  • Bir veya daha fazla veri sayfası boş olacak şekilde (ayrılmış satır yok) bir Öbek'ten satır silmek, bu alanı boşaltmak zorunda değildir. Büyük olasılıkla tablo üzerinde bir Kümelenmiş Dizin oluşturmanız veya bırakmanız veya çağırmanız gerekir ALTER TABLE [TableName] REBUILD;(SQL Server 2014'ten itibaren?). Daha fazla ayrıntı ve seçenek için lütfen DELETE için Microsoft Dokümanlar sayfasına bakın .

  • Tek tek satırlar (yani küme tabanlıINSERT , veri sayfalarını Kümelenmiş Dizinler ile tam olarak doldurmaz. Kümelenmiş Dizinler, satır (veri ve satır ek yükü) artı alan dizisinin 2 bayt ek yükü olduğu sürece satırlara sığacaktır. Bununla birlikte, Yığınlardaki veri sayfaları sayfada kalan bayt sayısını kullanmaz, bunun yerine sayfanın ne kadar dolu olduğuna dair çok genel bir gösterge kullanır ve rapor edilen pek çok seviye yoktur. Seviyeler şu çizgide bir şeydir:% 0,% 20,% 50,% 80 ve% 100 dolu. Ve başka bir satır için hala yer varken% 100'e geçecek (ve aslında, aynı sayıda satır set tabanlı bir işlemde yerleştirilmiş olsaydı, sayfayı mümkün olduğunca doldururdu). Tabii ki, tıpkıDELETE Yığın yeniden oluşturulduğunda, veri sayfasına sığacak sayıda satır paketlenir.

Şimdi, Sayfa Sıkıştırma Uygulaması için Microsoft Dokümanlar sayfasının "Sayfa Sıkıştırma Olduğunda" bölümünden alınan aşağıdaki bilgileri göz önünde bulundurun :

... İlk veri sayfasına veri eklendikçe, veriler satır sıkıştırılır. ... Sayfa dolduğunda, eklenecek sonraki satır sayfa sıkıştırma işlemini başlatır. Sayfanın tamamı incelenir; ...

Bu nedenle, veri sayfaları yazılmadan önce, diğer Yığın davranışı ile ALTER TABLE REBUILD, Kümelenmiş Bir Dizinin CREATE / DROP'unu veya Veri Sıkıştırma ayarında (tümü yığını yeniden oluşturan) bir değişiklik gerektirecekleri tamamen satır içi görünüyor. optimal. Yığınlar (Öbek yeniden inşa kadar) "Bütün sayfalar" tam olarak farkında değildir ve sayfa olduğunda bilmiyorsanız kesinlikle tam güncellemeleri ve tek ilgilenirken (sayfa sıkıştırma işlemini başlatmak için zaman, o zaman bilemeyiz sıralı ekler).

Bazı Yığınları otomatik olarak Sayfa Sıkıştırma uygulamasından (başka türlü yapabileceklerse bile) sınırlandıracak bir başka teknik, sıkıştırma uygulamasının, bu Yığın (varsa) için tüm Kümelenmemiş Dizinlerin yeniden oluşturulmasını gerektirmesidir. "Veri Sıkıştırma" için bu bağlantılı sayfada da belirtildiği gibi:

Bir yığının sıkıştırma ayarının değiştirilmesi, tablodaki kümelenmemiş tüm dizinlerin yığındaki yeni satır konumlarına işaret edecek şekilde yeniden oluşturulmasını gerektirir.

Belirtilen "işaretçiler", aşağıdakilerin bir kombinasyonu olan Satır Kimlikleri'dir (RID'ler): FileID, PageID ve sayfadaki alan / konum. Bu RID'ler Kümelenmemiş Dizinlere kopyalanır. Kesin bir fiziksel konum olarak, bazen Kümelenmiş Dizin anahtarlarıyla bir b ağacını geçmekten daha hızlı arama yaparlar. Ancak, fiziksel bir konumun bir dezavantajı, değişebilmesidir ve buradaki sorun budur. Bununla birlikte, Kümelenmiş Dizinler, Anahtar değerleri Kümelenmiş Dizin'e işaretçi olarak Kümelenmemiş Dizinlere kopyalandığından bu sorundan muzdarip değildir. Ve anahtar değerleri, fiziksel konumları değişse bile aynı kalır.

Ayrıca bakınız:

  • Yığınlar için Microsoft Docs sayfasının "Yığınları Yönetme" bölümü (Kümelenmiş Dizinsiz Tablolar) :

    Boşa alan kazanmak için bir yığını yeniden oluşturmak için, öbek üzerinde kümelenmiş bir dizin oluşturun ve sonra bu kümelenmiş dizini bırakın.

  • Veri Sıkıştırma için Microsoft Dokümanlar sayfasının "Satır ve Sayfa Sıkıştırmasını Kullanırken Dikkat Edilmesi Gerekenler" bölümü :

    Bir yığın sayfa düzeyinde sıkıştırma için yapılandırıldığında, sayfalar yalnızca sayfa düzeyinde sıkıştırma alır:

    • Veriler, toplu optimizasyonlar etkinken toplu olarak içe aktarılır.
    • Veriler INSERT INTO ... WITH (TABLOCK) sözdizimi kullanılarak eklenir ve tablonun kümelenmemiş bir dizini yoktur.
    • PAGE sıkıştırma seçeneğiyle ALTER TABLE ... REBUILD deyimi çalıştırılarak tablo yeniden oluşturulur.

    Ve soruda alıntılanan ifade.


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.