Seberapa akuratkah kolom sys.partition.rows?

13

Tampilan sistem sys.partitionsmemiliki kolom "baris" yang merupakan jumlah total baris dalam partisi yang diberikan. Untuk tabel yang tidak dipartisi (atau hanya memiliki satu partisi tergantung pada bagaimana Anda melihatnya), kolom ini memberikan jumlah baris dalam tabel.

Saya ingin tahu seberapa akurat kolom ini dan apakah saya dapat menggunakannya sebagai ganti SELECT COUNT(1) FROM TableName. Saya telah melakukan beberapa percobaan di mana membuat tabel dan menambahkan beberapa ribu baris, menghapus beberapa ratus, menambahkan beberapa ribu lebih dll dan penghitungan selalu mati. Namun saya punya satu meja dengan sekitar 700 mil baris dan beberapa indeks. Baris sys.partitionsuntuk indeks berkerumun lagi mati, namun indeks lain menunjukkan beberapa variasi kecil (+ -20k).

Adakah yang tahu bagaimana baris ini dihitung dan apakah seakurat itu muncul?

Kenneth Fisher
sumber
4
Saya telah menggunakan kueri berdasarkan kolom baris sejak lama. Belum terpantau ketinggalan zaman
billinkc

Jawaban:

13

Books Online menyatakan bahwa bidang baris "menunjukkan perkiraan jumlah baris di partisi ini." Karena itu saya berharap itu menjadi dekat, tetapi tidak 100% akurat, 100% dari waktu.

Michael Zilberstein melaporkan contoh sys.partitionskesalahan yang salah di For want of nail . Tidak mengatakan itu adalah kejadian umum, tetapi itu mungkin.

sys.dm_db_index_physical_statsberisi record_countbidang yang tampaknya lebih akurat, meskipun waspada menjalankan DMV dapat mengakibatkan masalah pemblokiran REDO jika Anda menjalankannya pada contoh hosting Replikasi Sekunder yang Selalu Dapat Dibaca.

The penjelasan untuk record_countlapangan menunjukkan info berikut:

Total jumlah catatan.

Untuk indeks, jumlah total catatan berlaku untuk level b-tree saat ini di unit alokasi IN_ROW_DATA.

Untuk tumpukan, jumlah total catatan dalam unit alokasi IN_ROW_DATA.

Untuk tumpukan, jumlah catatan yang dikembalikan dari fungsi ini mungkin tidak cocok dengan jumlah baris yang dikembalikan dengan menjalankan SELECT COUNT (*) terhadap tumpukan. Ini karena satu baris dapat berisi banyak catatan. Misalnya, di bawah beberapa situasi pembaruan, satu baris tumpukan mungkin memiliki catatan penerusan dan catatan penerusan sebagai hasil dari operasi pembaruan. Juga, sebagian besar baris LOB dibagi menjadi beberapa catatan dalam penyimpanan LOB_DATA. Untuk unit alokasi LOB_DATA atau ROW_OVERFLOW_DATA, jumlah total catatan dalam unit alokasi lengkap.

Lihat juga jawaban Martin Smith untuk pertanyaan serupa tentang Stack Overflow.

Max Vernon
sumber