Applies to: SQL Server 2016 (13.x) and later
Azure SQL Database
Azure SQL Managed Instance
現在のデータベース内のすべての列ストア インデックスに関する現在の行グループ レベルの情報を提供します。
This DMV extends the catalog view sys.column_store_row_groups.
Column name | Data type | Description |
---|---|---|
object_id |
int | 基になるテーブルの ID。 |
index_id |
int | テーブル上のこの列ストア インデックス object_id ID。 |
partition_number |
int |
row_group_id を保持するテーブル パーティションの ID。 partition_numberを使用して、この DMV を sys.partitions |
row_group_id |
int | この行グループの ID。 パーティション テーブルの場合、値はパーティション内で一意です。-1 メモリ内テールの場合は 〗。 |
delta_store_hobt_id |
bigint | デルタ ストア内の行グループのhobt_id。NULL 行グループがデルタ ストアに存在しない場合は 。NULL メモリ内テーブルの末尾を指定します。 |
state |
tinyint |
state_description に関連付けられている ID 番号。0 = INVISIBLE 1 = OPEN 2 = CLOSED 3 = COMPRESSED 4 = TOMBSTONE COMPRESSED は、メモリ内テーブルに適用される唯一の状態です。 |
state_desc |
nvarchar(60) | 行グループの状態の説明:0
-
INVISIBLE - ビルド中の行グループ。 For example:列ストア内の行グループは、データの圧縮中に INVISIBLE されます。 圧縮が完了すると、メタデータ スイッチによって列ストア行グループの状態が INVISIBLE から COMPRESSED に変更され、デルタストア行グループの状態が CLOSED から TOMBSTONE に変更されます。1
-
OPEN - 新しい行を受け入れるデルタストア行グループ。 開いている行グループは引き続き行ストア形式であり、列ストア形式に圧縮されていません。2
-
CLOSED - デルタ ストア内の行グループ。行の最大数が含まれており、タプル ムーバー プロセスによって列ストアに圧縮されるのを待機しています。3
-
COMPRESSED - 列ストア圧縮で圧縮され、列ストアに格納される行グループ。4
-
TOMBSTONE - 以前はデルタストアに存在し、使用されなくなった行グループ。 |
total_rows |
bigint | 行グループに物理的に格納されている行の数。 圧縮された行グループの場合。 削除済みとしてマークされている行が含まれます。 |
deleted_rows |
bigint | 削除対象としてマークされている圧縮行グループに物理的に格納されている行の数。0 デルタ ストア内の行グループの場合は 。非クラスター化列ストア インデックスの場合、この値には削除バッファーに格納されている削除された行は含まれません。 For more information, and to find the number of deleted rows in the delete buffer, see sys.internal_partitions. |
size_in_bytes |
bigint | この行グループ内のすべてのページの合計サイズ (バイト単位)。 このサイズには、メタデータまたは共有ディクショナリを格納するために必要なサイズは含まれません。 |
trim_reason |
tinyint |
COMPRESSED 行グループが最大行数を下回る原因。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_reason の説明。0
-
UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION : 以前のバージョンの SQL Server からアップグレードするときに発生しました。1
-
NO_TRIM : 行グループがトリミングされませんでした。 行グループは最大 1,048,576 行で圧縮されました。 デルタ行グループが閉じられた後に行のサブセットが削除された場合、行の数が少なくなる可能性があります2
-
BULKLOAD : 一括読み込みバッチ サイズによって、行数が制限されます。3
-
REORG : コマンドの一部としての強制圧縮 REORG 。4
-
DICTIONARY_SIZE : 辞書のサイズが大きくなりすぎて、すべての行を一緒に圧縮する必要があります。5
-
MEMORY_LIMITATION : すべての行を一緒に圧縮するのに十分なメモリがありません。6
-
RESIDUAL_ROW_GROUP : インデックスのビルド操作中に 100 万行 < 最後の行グループの一部として閉じられます。Note: A partition build with multiple cores can result in more than one trim of this type. 7
-
STATS_MISMATCH : メモリ内テーブルの列ストアに対してのみ。 統計が正しく示されていない>= 末尾に 100 万行の修飾された行が見つかった場合、圧縮された行グループの行数は 100 万行<8
-
SPILLOVER : メモリ内テーブルの列ストアに対してのみ。 末尾に 100 万行の修飾行 > 場合、カウントが 100,000 から 100 万の間の場合、残りの最後のバッチ行は圧縮されます9
-
AUTO_MERGE : バックグラウンドで実行されているタプル ムーバーマージ操作は、1 つ以上の行グループをこの行グループに統合しました。 |
transition_to_compressed_state |
tinyint | この行グループがデルタストアから列ストアの圧縮状態に移行された方法を示します。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 - 操作はデルタストアには適用されません。 または、SQL Server 2016 (13.x) にアップグレードする前に行グループが圧縮されました。その場合、履歴は保持されません。2
-
INDEX_BUILD - インデックスの作成またはインデックスの再構築によって行グループが圧縮されました。3
-
TUPLE_MOVER - バックグラウンドで実行されているタプル ムーバーによって、行グループが圧縮されました。 タプル ムーバーは、行グループの状態が OPEN から CLOSED に変更された後に発生します。4
-
REORG_NORMAL - 再編成操作 ALTER INDEX ... REORG 、 CLOSED 行グループをデルタストアから列ストアに移動しました。 これは、タプルムーバーが行グループを移動する時間が発生する前に発生しました。5
-
REORG_FORCED - この行グループはデルタストアで開かれていたため、列ストアに強制的に挿入されてから、完全な数の行が存在していました。6
-
BULKLOAD - 一括読み込み操作では、デルタストアを使用せずに行グループが直接圧縮されました。7
-
MERGE - マージ操作により、1 つ以上の行グループがこの行グループに統合され、列ストアの圧縮が実行されました。 |
has_vertipaq_optimization |
bit | VertiPaq の最適化では、行グループ内の行の順序を並べ替えて、より高い圧縮を実現することで、列ストアの圧縮が向上します。 この最適化は、ほとんどの場合自動的に行われます。 VertiPaq 最適化が使用されない場合は、次の 2 つがあります。 a. デルタ行グループが列ストアに移動し、列ストア インデックスに非クラスター化インデックスが 1 つ以上存在する場合は、マッピング インデックスへの変更を最小限に抑えるために VertiPaq の最適化がスキップされます。 b. メモリ最適化テーブルの列ストア インデックスの場合。 0 = いいえ1 = はい |
generation |
bigint | この行グループに関連付けられている行グループの生成。 |
created_time |
datetime2 | この行グループが作成された時刻。NULL - メモリ内テーブルの列ストア インデックスの場合。 |
closed_time |
datetime2 | この行グループが閉じられた時刻。NULL - メモリ内テーブルの列ストア インデックスの場合。 |
Results
現在のデータベースの行グループごとに 1 行を返します。
Permissions
テーブル CONTROL
権限とデータベースに対する VIEW DATABASE STATE
権限が必要です。
SQL Server 2022 以降でのアクセス許可
データベース VIEW DATABASE PERFORMANCE STATE
アクセス許可が必要です。
Examples
A. 断片化を計算して、列ストア インデックスを再構成または再構築するタイミングを決定する
列ストア インデックスの場合、削除された行の割合は、行グループの断片化に適した尺度です。 断片化が 20% 以上の場合は、削除された行を削除します。 その他の例については、「 インデックスのメンテナンスを最適化してクエリのパフォーマンスを向上させ、リソースの消費量を削減する」を参照してください。
次の使用例は、 sys.dm_db_column_store_row_group_physical_stats
を他のシステム テーブルと結合し、現在のデータベースの各行グループの効率の見積もりとして Fragmentation
列を計算します。 1 つのテーブルに関する情報を検索するには、 WHERE
句の前にあるコメント ハイフンを削除し、テーブル名を指定します。
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;