Bagikan melalui


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed Instance SQL databasedi Microsoft Fabric

Menyediakan informasi tingkat grup baris saat ini tentang semua indeks penyimpan kolom dalam database saat ini.

DMV ini memperluas sys.column_store_row_groups tampilan katalog.

Nama kolom Jenis data Description
object_id int ID tabel yang mendasar.
index_id int ID indeks penyimpan kolom ini pada object_id tabel.
partition_number int ID partisi tabel yang menyimpan row_group_id. Anda dapat menggunakan partition_number untuk menggabungkan DMV ini sys.partitions
row_group_id int ID grup baris ini. Untuk tabel yang dipartisi, nilai unik dalam partisi.

-1 untuk ekor dalam memori.
delta_store_hobt_id bigint hobt_id untuk grup baris di penyimpanan delta.

NULL jika grup baris tidak berada di penyimpanan delta.

NULL untuk ekor tabel dalam memori.
state tinyint Nomor ID terkait state_description.

0 = INVISIBLE
1= OPEN
2 = CLOSED
3 = COMPRESSED
4 = TOMBSTONE

COMPRESSED adalah satu-satunya status yang berlaku untuk tabel dalam memori.
state_desc nvarchar(60) Deskripsi status grup baris:

0 - INVISIBLE - Grup baris yang sedang dibangun. Contohnya:

Grup baris di penyimpan kolom adalah INVISIBLE saat data sedang dikompresi. Ketika pemadatan selesai, sakelar metadata mengubah status grup baris penyimpan kolom dari INVISIBLE ke COMPRESSED, dan status grup baris deltastore dari CLOSED ke TOMBSTONE.

1 - OPEN - Grup baris deltastore yang menerima baris baru. Grup baris terbuka masih dalam format rowstore dan belum dikompresi ke format penyimpan kolom.

2 - CLOSED - Grup baris di penyimpanan delta yang berisi jumlah baris maksimum, dan sedang menunggu proses penggerak tuple untuk memadatkannya ke penyimpanan kolom.

3 - COMPRESSED - Grup baris yang dikompresi dengan kompresi penyimpan kolom dan disimpan di penyimpan kolom.

4 - TOMBSTONE - Grup baris yang sebelumnya berada di deltastore dan tidak lagi digunakan.
total_rows bigint Jumlah baris yang disimpan secara fisik dalam grup baris. Untuk grup baris terkompresi. Menyertakan baris yang ditandai dihapus.
deleted_rows bigint Jumlah baris yang disimpan secara fisik dalam grup baris terkompresi yang ditandai untuk dihapus.

0 untuk grup baris yang berada di penyimpanan delta.

Untuk indeks penyimpan kolom noncluster, nilai ini tidak menyertakan baris yang dihapus yang disimpan dalam buffer penghapusan. Untuk informasi selengkapnya, dan untuk menemukan jumlah baris yang dihapus di buffer penghapusan, lihat sys.internal_partitions.
size_in_bytes bigint Ukuran gabungan, dalam byte, dari semua halaman dalam grup baris ini. Ukuran ini tidak termasuk ukuran yang diperlukan untuk menyimpan metadata atau kamus bersama.
trim_reason tinyint Alasan yang memicu COMPRESSED grup baris memiliki kurang dari jumlah baris maksimum.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION
1 - NO_TRIM
2 - BULKLOAD
3 - REORG
4 - DICTIONARY_SIZE
5 - MEMORY_LIMITATION
6 - RESIDUAL_ROW_GROUP
7 - STATS_MISMATCH
8 - SPILLOVER
9 - AUTO_MERGE
trim_reason_desc nvarchar(60) trim_reasonDeskripsi .

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Terjadi saat memutakhirkan dari versi SQL Server sebelumnya.

1 - NO_TRIM: Grup baris tidak dipangkas. Grup baris dikompresi dengan maksimum 1.048.576 baris. Jumlah baris bisa lebih sedikit jika subset baris dihapus setelah grup baris delta ditutup

2 - BULKLOAD: Ukuran batch beban massal membatasi jumlah baris.

3 - REORG: Pemadatan paksa sebagai bagian REORG dari perintah.

4 - DICTIONARY_SIZE: Ukuran kamus tumbuh terlalu besar untuk mengompresi semua baris bersama-sama.

5 - MEMORY_LIMITATION: Memori yang tersedia tidak cukup untuk memadatkan semua baris bersama-sama.

6 - RESIDUAL_ROW_GROUP: Ditutup sebagai bagian dari grup baris terakhir dengan baris < 1 juta selama operasi build indeks.

Catatan: Build partisi dengan beberapa inti dapat menghasilkan lebih dari satu trim dari jenis ini.

7 - STATS_MISMATCH: Hanya untuk penyimpan kolom pada tabel dalam memori. Jika statistik salah ditunjukkan >= 1 juta baris yang memenuhi syarat di ekor tetapi kami menemukan lebih sedikit, grup baris terkompresi akan memiliki < 1 juta baris

8 - SPILLOVER: Hanya untuk penyimpan kolom pada tabel dalam memori. Jika ekor memiliki > 1 juta baris yang memenuhi syarat, baris batch terakhir yang tersisa dikompresi jika jumlahnya antara 100.000 dan 1 juta

9 - AUTO_MERGE: Operasi penggabungan Tuple Mover yang berjalan di latar belakang mengonsolidasikan satu atau beberapa grup baris ke dalam grup baris ini.
transition_to_compressed_state tinyint Memperlihatkan bagaimana grup baris ini dipindahkan dari deltastore ke status terkompresi di penyimpan kolom.

1 - NOT_APPLICABLE
2 - INDEX_BUILD
3 - TUPLE_MOVER
4 - REORG_NORMAL
5 - REORG_FORCED
6 - BULKLOAD
7 - MERGE
transition_to_compressed_state_desc nvarchar(60) 1 - NOT_APPLICABLE - operasi tidak berlaku untuk deltastore. Atau, grup baris dikompresi sebelum memutakhirkan ke SQL Server 2016 (13.x) dalam hal ini riwayat tidak dipertahankan.

2 - INDEX_BUILD - Pembuatan indeks atau pembangunan ulang indeks mengompresi grup baris.

3 - TUPLE_MOVER - Penggerak tuple yang berjalan di latar belakang memadatkan grup baris. Penggerak tuple terjadi setelah grup baris mengubah status dari OPEN ke CLOSED.

4 - REORG_NORMAL - Operasi reorganisasi, ALTER INDEX ... REORG, memindahkan CLOSED grup baris dari deltastore ke penyimpan kolom. Ini terjadi sebelum tuple-mover memiliki waktu untuk memindahkan grup baris.

5 - REORG_FORCED - Grup baris ini terbuka di deltastore dan dipaksa ke penyimpanan kolom sebelum memiliki sejumlah besar baris.

6 - BULKLOAD - Operasi beban massal memadatkan grup baris secara langsung tanpa menggunakan deltastore.

7 - MERGE - Operasi penggabungan mengonsolidasikan satu atau beberapa grup baris ke dalam grup baris ini lalu melakukan kompresi penyimpan columnstore.
has_vertipaq_optimization bit Pengoptimalan VertiPaq meningkatkan kompresi penyimpan kolom dengan mengatur ulang urutan baris dalam grup baris untuk mencapai kompresi yang lebih tinggi. Pengoptimalan ini terjadi secara otomatis dalam banyak kasus. Ada dua kasus di mana pengoptimalan VertiPaq tidak digunakan:

a. ketika grup baris delta berpindah ke penyimpan kolom dan ada satu atau beberapa indeks nonclustered pada indeks penyimpan kolom - dalam hal ini pengoptimalan VertiPaq dilewati untuk meminimalkan perubahan pada indeks pemetaan;

b. untuk indeks penyimpan kolom pada tabel yang dioptimalkan memori.

0 = Tidak
1 = Ya
generation bigint Pembuatan grup baris yang terkait dengan grup baris ini.
created_time datetime2 Waktu jam ketika grup baris ini dibuat.

NULL - untuk indeks penyimpan kolom pada tabel dalam memori.
closed_time datetime2 Waktu jam ketika grup baris ini ditutup.

NULL - untuk indeks penyimpan kolom pada tabel dalam memori.

Results

Mengembalikan satu baris untuk setiap grup baris dalam database saat ini.

Permissions

CONTROL Memerlukan izin pada tabel dan VIEW DATABASE STATE izin pada database.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin VIEW DATABASE PERFORMANCE STATE pada database.

Examples

A. Menghitung fragmentasi untuk memutuskan kapan harus mengatur ulang atau membangun kembali indeks penyimpan kolom

Untuk indeks penyimpan kolom, persentase baris yang dihapus adalah ukuran yang baik untuk fragmentasi dalam grup baris. Saat fragmentasi adalah 20% atau lebih, hapus baris yang dihapus. Untuk contoh selengkapnya, lihat Mengoptimalkan pemeliharaan indeks untuk meningkatkan performa kueri dan mengurangi konsumsi sumber daya.

Contoh ini bergabung sys.dm_db_column_store_row_group_physical_stats dengan tabel sistem lain lalu menghitung Fragmentation kolom sebagai perkiraan efisiensi setiap grup baris dalam database saat ini. Untuk menemukan informasi pada satu tabel, hapus tanda hubung komentar di depan WHERE klausa dan berikan nama tabel.

SELECT i.object_id,
       object_name(i.object_id) AS TableName,
       i.name AS IndexName,
       i.index_id,
       i.type_desc,
       CSRowGroups.*,
       100 * (ISNULL(deleted_rows, 0)) / NULLIF (total_rows, 0) AS 'Fragmentation'
FROM sys.indexes AS i
     INNER JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups
         ON i.object_id = CSRowGroups.object_id
        AND i.index_id = CSRowGroups.index_id
-- WHERE object_name(i.object_id) = 'table_name'
ORDER BY object_name(i.object_id), i.name, row_group_id;