適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
セグメントごとに列ストア インデックス情報を提供します。
クラスター化列ストア インデックスの場合、 sys.column_store_row_groups には物理的に格納された行の合計数 (削除済みとしてマークされているものを含む) の列と、削除済みとしてマークされた行数の列があります。
sys.column_store_row_groupsを使用して、削除された行の割合が高く、再構築する必要がある行グループを決定します。
| 列名 | データ型 | 説明 |
|---|---|---|
object_id |
int | このインデックスが定義されているテーブルの ID。 |
index_id |
int | 列ストア インデックスの ID。 |
partition_number |
int |
row_group_idによって識別される行グループを保持するテーブル パーティション。
partition_numberを使用してsys.partitionsに参加します。 |
row_group_id |
int | この行グループに関連付けられている行グループ番号。 この数は、パーティション内で一意です。 -1 = メモリ最適化テーブルの末尾。 |
delta_store_hobt_id |
bigint | デルタ ストア内のOPEN行グループのhobt_id。行グループがデルタ ストアにない場合は NULL。 メモリ最適化テーブルの末尾の NULL。 |
state |
tinyint | 行グループの状態を説明する数値。 0 = INVISIBLE1 = OPEN2 = CLOSED3 = COMPRESSED4 = TOMBSTONE |
state_description |
nvarchar(60) | 行グループの状態の説明:INVISIBLE - デルタ ストア内のデータから構築されるプロセス内の非表示の圧縮セグメント。 読み取りアクションでは、非表示の圧縮セグメントが完了するまでデルタ ストアが使用されます。 その後、新しいセグメントが表示されると、ソース デルタ ストアは削除されます。OPEN - 新しい行を受け入れる読み取り/書き込み行グループ。 開いている行グループは引き続き行ストア形式であり、列ストア形式に圧縮されません。CLOSED - タプル ムーバー プロセスによって満たされているが、まだ圧縮されていない行グループ。COMPRESSED - 塗りつぶされて圧縮される行グループ。 |
total_rows |
bigint | 行グループに物理的に格納されている行の合計。 削除された行は引き続き格納される場合があります。 行グループ内の行の最大数は 1,048,576 です。 |
deleted_rows |
bigint | 削除済みとしてマークされているが、保存されたままの行グループ内の行の合計数。 この値は、デルタ行グループに対して常に 0 されます。非クラスター化列ストア インデックスの場合、この値には削除バッファーに格納されている削除された行は含まれません。 詳細については、削除バッファー内の削除された行の数を調べるには、 sys.internal_partitionsを参照してください。 |
size_in_bytes |
bigint | デルタ ストアと列ストアの両方の行グループについて、この行グループ内のすべてのデータ (メタデータや共有ディクショナリを含まない) のサイズ (バイト単位)。 |
解説
クラスター化列ストア インデックスまたは非クラスター化列ストア インデックスを持つ各テーブルのパーティションごとに、列ストア行グループごとに 1 行を返します。
sys.column_store_row_groupsを使用して、行グループ内の行の数と行グループのサイズを確認します。
行グループ内の削除済みの行の数が合計行数に対して占める割合が高くなると、テーブルの効率が低下します。 テーブルのサイズが小さくなるよう列ストア インデックスを再構築して、テーブルを読み取るために必要なディスク I/O を削減します。 列ストア インデックスを再構築するには、ALTER INDEX ステートメントの REBUILD 句を使用します。
更新可能な列ストアは、最初に新しいデータを開いている行グループに挿入します。これは行ストア形式であり、デルタ テーブルとも呼ばれます。 開いている行グループがいっぱいになると、その状態が CLOSEDに変わります。 閉じた行グループは、タプル ムーバーによって列ストア形式に圧縮され、状態が COMPRESSEDに変わります。 タプル ムーバーは、定期的に起動し、列ストア行グループに圧縮する準備ができている閉じた行グループがあるかどうかを確認するバックグラウンド プロセスです。 タプル ムーバーは、すべての行が削除される行グループの割り当ても解除します。 割り当て解除された行グループは、 TOMBSTONEとしてマークされます。 タプル ムーバーをすぐに実行するには、ALTER INDEX ステートメントの REORGANIZE 句を使用します。
列ストア行グループがいっぱいになると、列ストア行グループは圧縮され、新しい行の受け入れは停止します。 圧縮されたグループから行を削除すると、その行は残りますが、削除済みとしてマークされます。 圧縮されたグループに対する更新は、圧縮されたグループからの削除、および OPEN 状態のグループへの挿入として実装されます。
アクセス許可
ユーザーがテーブルに対する VIEW DEFINITION 権限を持っている場合は、テーブルの情報を返します。
カタログ ビューでのメタデータの可視性は、ユーザーが所有しているか、ユーザーに何らかのアクセス許可が付与されているセキュリティ保護可能なリソースに限定されます。 詳細については、「 メタデータの可視性の構成」を参照してください。
例
次の例では、 sys.column_store_row_groups ビューとその他のシステム ビューを結合して、クラスター化列ストア インデックスに関する情報を返します。
percent_full列は、行グループの効率の推定値です。
SELECT i.object_id,
OBJECT_SCHEMA_NAME(i.object_id) AS schema_name,
OBJECT_NAME(i.object_id) AS table_name,
i.name AS index_name,
i.type_desc AS index_type_desc,
rg.partition_number,
rg.row_group_id,
rg.state_description,
rg.total_rows,
rg.deleted_rows,
rg.size_in_bytes,
100 * (rg.total_rows - ISNULL(rg.deleted_rows, 0)) / total_rows AS percent_full
FROM sys.indexes AS i
INNER JOIN sys.column_store_row_groups AS rg
ON i.object_id = rg.object_id
AND i.index_id = rg.index_id
WHERE INDEXPROPERTY(i.object_id, i.name, 'IsClustered') = 1
ORDER BY schema_name, table_name, index_name, row_group_id;
詳細については、「 列ストア インデックスの断片化を確認する」を参照してください。