Sys.partition.rows sütunu ne kadar doğrudur?


14

Sistem görünümünde sys.partitions, belirli bir bölümdeki toplam satır sayısı olan bir sütun "satırları" vardır. Bölümlenmemiş bir tablo için (veya nasıl göründüğünüze bağlı olarak yalnızca bir bölümü vardır) bu sütun tablodaki satır sayısını verir.

Bu sütunun ne kadar doğru olduğunu ve a yerine kullanıp kullanamayacağımı merak ediyorum SELECT COUNT(1) FROM TableName. Bir tablo oluşturmak ve birkaç bin satır eklemek, birkaç yüz silmek, birkaç bin daha eklemek vb bazı deneyler yaptım ve sayım her zaman öldü. Ancak yaklaşık 700 mil satır ve birkaç dizin ile bir tablo var. sys.partitionsKümelenmiş dizin için satır tekrar ölüdür, ancak diğer dizinler bazı küçük değişiklikler gösterir (+ -20k).

Herkes bu satırın nasıl hesaplandığını ve göründüğü kadar doğru olup olmadığını biliyor mu?


4
Şimdi yıllardır satır sütun dayalı bir sorgu kullanıyorum . Güncel olmadığını gözlemledim
billinkc

Yanıtlar:


13

Çevrimiçi Kitaplar, satır alanının " bu bölümdeki yaklaşık satır sayısını gösterdiğini" belirtir . Bu yüzden yakın olmasını beklerdim, ama% 100 doğru değil,% 100.

Michael Zilberstein Çivi istemeksys.partitions için çılgınca yanlış olmanın bir örneğini bildirir . Bunun yaygın bir olay olduğunu söylememek, ancak mümkündür.

sys.dm_db_index_physical_statsBir içeren record_countbir AlwaysOn Okunabilir İkincil Taklit barındıran bir örneği üzerinde çalıştırırsanız bir REDO engelleme sorunu neden olabilir DMV çalışan farkında olsa görünür, daha doğru olması için o alanı.

Açıklama için record_countsahada aşağıdaki bilgileri gösterir:

Toplam kayıt sayısı.

Bir endeks için toplam kayıt sayısı, IN_ROW_DATA tahsis ünitesindeki b-ağacının mevcut seviyesi için geçerlidir.

Bir yığın için, IN_ROW_DATA ayırma birimindeki toplam kayıt sayısı.

Bir yığın için, bu işlevden döndürülen kayıtların sayısı, yığınla bir SELECT COUNT (*) çalıştırılarak döndürülen satır sayısıyla eşleşmeyebilir. Bunun nedeni bir satırın birden fazla kayıt içermesidir. Örneğin, bazı güncelleme durumlarında, tek bir yığın satırında, güncelleme işlemi sonucunda bir yönlendirme kaydı ve bir yönlendirme kaydı bulunabilir. Ayrıca, çoğu büyük LOB satırı, LOB_DATA depolama alanında birden çok kayda bölünür. LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri için, tüm ayırma birimindeki toplam kayıt sayısı.

Ayrıca Martin Smith'in Stack Overflow ile ilgili benzer bir soruya verdiği cevaba bakınız .


1

BOL gerçekten de bu sütun için "bu bölümdeki yaklaşık satır sayısını gösterir" diyor. Ve yaklaşık çok yaklaşık. Belli bir bölümde 1 kaydım olduğunu gördüm. sy.partitions.rows, 4048 satırı gösteriyordu. Bu kaydı sildikten sonra, tüm dizinlerin vb. Yeniden oluşturulmasından sonra bile 4048 satırı göstermeye devam ediyordu. Yani bir sonuç, buna güvenmek istiyorsanız, etmeyin.


Lütfen, söz konusu teklifin kaynak bağlantısını vererek sorunuzu düzenleyin. Cevabınızı geliştirecek;)
Ronaldo
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.