次の方法で共有


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Applies to: SQL Server 2016 (13.x) and later Azure SQL DatabaseAzure 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 ... REORGCLOSED 行グループをデルタストアから列ストアに移動しました。 これは、タプルムーバーが行グループを移動する時間が発生する前に発生しました。

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;