セグメント単位でクラスター化列ストア インデックス情報を提供して、システム管理に関する管理者の決定を支援します。 sys.column_store_row_groups には、物理的に格納されている行 (削除済みとしてマークされている行を含む) の合計数の列と削除済みとしてマークされている行の数の列があります。 削除済みの行の割合が高く、再構築する必要のある行グループを特定するには、sys.column_store_row_groups を使用します。
適用対象: SQL Server (SQL Server 2014 から現在のバージョンまで) |
列名 |
データ型 |
説明 |
|---|---|---|
object_id |
int |
このインデックスが定義されているテーブルの ID。 |
index_id |
int |
この列ストア インデックスがあるテーブルのインデックスの ID。 |
partition_number |
int |
行グループ row_group_id を保持するテーブル パーティションの ID。 この DMV を sys.partitions に結合するには、partition_number を使用できます。 |
row_group_id |
int |
この行グループに関連付けられている行グループ番号。 この番号はパーティション内で一意です。 |
delta_store_hobt_id |
bigint |
デルタ行グループの hobt_id で、行グループの種類がデルタではない場合は NULL。 デルタ行グループとは、新しいレコードを受け入れる読み取り/書き込み行グループのことです。 デルタ行グループの状態は OPEN です。 デルタ行グループは、行ストア形式のままであり、列ストア形式に圧縮されていません。 |
state |
tinyint |
state_description に関連付けられている ID 番号。 0 = INVISIBLE 1 = OPEN 2 = CLOSED 3 = COMPRESSED |
state_description |
nvarchar(60) |
行グループの永続的な状態の説明: INVISIBLE - デルタ ストアのデータからの構築プロセスにおける非表示の圧縮されたセグメント。 非表示の圧縮されたセグメントが完了するまで、読み取りアクションでデルタ ストアが使用されます。 その後、新しいセグメントが表示されると、ソース デルタ ストアは削除されます。 OPEN - 新しいレコードを受け入れる読み取り/書き込み行グループ。 OPEN の行グループは、行ストア形式のままであり、列ストア形式に圧縮されていません。 CLOSED - いっぱいになったが、組ムーバー プロセスによってまだ圧縮されていない行グループ。 COMPRESSED - いっぱいになり、圧縮された行グループ。 |
total_rows |
bigint |
行グループに物理的に格納されている行の合計。 削除された行がまだ格納されていることがあります。 1 つの行グループの最大行数は 1,048,576 (16 進数では FFFFF) です。 |
deleted_rows |
bigint |
削除済みとしてマークされている行グループ内の行の合計。 これはデルタ行グループの場合は常に 0 です。 |
size_in_bytes |
bigint |
この行グループ内にあるすべてのデータ (メタデータと共有辞書は除く) のサイズ (バイト単位)。デルタ行グループと列ストア行グループの両方が対象です。 |
解説
クラスター化または非クラスター化列ストア インデックスがある各テーブルの列ストア行グループごとに 1 つの行を返します。
行グループに含まれている行の数と行グループのサイズを特定するには、sys.column_store_row_groups を使用します。
行グループ内の削除済みの行の数が合計行数に対して占める割合が高くなると、テーブルの効率が低下します。 テーブルのサイズが小さくなるよう列ストア インデックスを再構築して、テーブルを読み取るために必要なディスク I/O を削減します。 列ストア インデックスを再構築するには、ALTER INDEX ステートメントの REBUILD オプションを使用します。
更新可能な列ストアは、まず、デルタ テーブルとも呼ばれる行ストア形式の OPEN 状態の行グループに新しいデータを挿入します。 OPEN 状態の行グループがいっぱいになると、その状態は CLOSED に変わります。 CLOSED 状態の行グループは、組ムーバーによって列ストア形式に圧縮され、その状態は COMPRESSED に変わります。 組ムーバーは、定期的に起動され、列ストア行グループに圧縮する準備ができている CLOSED 状態の行グループがあるかどうかを確認するバックグラウンド プロセスです。 また、組ムーバーは、すべての行が削除された行グループの割り当てを解除します。 割り当てが解除された行グループは、RETIRED としてマークされます。 組ムーバーを直ちに実行するには、ALTER INDEX ステートメントの REORGANIZE オプションを使用します。
列ストア行グループは、いっぱいになると圧縮され、新しい行の受け入れを停止します。 圧縮されたグループから行が削除されると、削除された行は、保持されますが、削除済みとしてマークされます。 圧縮されたグループに対する更新は、圧縮されたグループからの削除、および OPEN 状態のグループへの挿入として実装されます。
権限
ユーザーがテーブルに対して VIEW DEFINITION 権限を持っている場合は、テーブルの情報を返します。
カタログ ビューでのメタデータの表示が、ユーザーが所有しているかそのユーザーが権限を許可されている、セキュリティ保護可能なメタデータに制限されます。 詳細については、「メタデータ表示の構成」を参照してください。
例
次の例は、sys.column_store_row_groups テーブルを他のシステム テーブルに結合して、特定のテーブルに関する情報を返します。 計算済みの PercentFull 列は、行グループの効率の推定値を示します。 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*(total_rows - ISNULL(deleted_rows,0))/total_rows AS PercentFull
FROM sys.indexes AS i
JOIN sys.column_store_row_groups 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;
関連項目
参照
オブジェクト カタログ ビュー (Transact-SQL)
sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-SQL)
sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)