sys.column_store_row_groups (Transact-SQL)
適用対象: SQL Server 2012 (11.x) 以降 Azure SQL Managed Instance
管理者がシステム管理を決定するのに役立つ、セグメントごとにクラスター化列ストア インデックス情報を提供します。 sys.column_store_row_groups には、物理的に格納されている行の合計数 (削除済みとしてマークされているものを含む) の列と、削除済みとしてマークされた行数の列があります。 sys.column_store_row_groupsを使用して、削除された行の割合が高く、再構築する必要がある行グループを決定します。
列名 | データ型 | 説明 |
---|---|---|
object_id | int | このインデックスが定義されているテーブルの ID。 |
index_id | int | この列ストア インデックスを持つテーブルのインデックスの ID。 |
partition_number | INT | 行グループ row_group_id を保持するテーブル パーティションの ID。 partition_numberを使用して、この DMV を sys.partitions に参加させることができます。 |
row_group_id | int | この行グループに関連付けられている行グループ番号。 これはパーティション内で一意です。 -1 = メモリ内テーブルの末尾。 |
delta_store_hobt_id | bigint | デルタ ストア内の OPEN 行グループのhobt_id。 行グループがデルタ ストアにない場合は NULL。 メモリ内テーブルの末尾の NULL。 |
state | tinyint | state_descriptionに関連付けられている ID 番号。 0 = INVISIBLE 1 = OPEN 2 = CLOSED 3 = COMPRESSED 4 = TOMBSTONE |
state_description | nvarchar(60) | 行グループの永続的な状態の説明: INVISIBLE -デルタ ストア内のデータから構築されるプロセス内の非表示の圧縮セグメント。 非表示の圧縮されたセグメントが完了するまで、読み取りアクションでデルタ ストアが使用されます。 その後、新しいセグメントが表示されると、ソース デルタ ストアは削除されます。 OPEN - 新しいレコードを受け入れる読み取り/書き込み行グループ。 開いている行グループは引き続き行ストア形式であり、列ストア形式に圧縮されていません。 CLOSED - タプル ムーバー プロセスによって塗りつぶされたが、まだ圧縮されていない行グループ。 COMPRESSED - 塗りつぶしと圧縮が行われる行グループ。 |
total_rows | bigint | 行グループに物理的に格納されている行の合計。 一部は削除されている可能性がありますが、まだ保存されています。 行グループ内の行の最大数は 1,048,576 (16 進数の FFFFF) です。 |
deleted_rows | bigint | 削除済みとしてマークされた行グループ内の行の合計数。 これはデルタ行グループの場合は常に 0 です。 |
size_in_bytes | bigint | DELTA 行グループと COLUMNSTORE 行グループの両方について、この行グループ内のすべてのデータ (メタデータや共有ディクショナリを含まない) のサイズ (バイト単位)。 |
解説
クラスター化列ストア インデックスまたは非クラスター化列ストア インデックスを持つテーブルごとに、列ストア行グループごとに 1 行を返します。
sys.column_store_row_groupsを使用して、行グループに含まれる行の数と行グループのサイズを決定します。
行グループ内の削除済みの行の数が合計行数に対して占める割合が高くなると、テーブルの効率が低下します。 テーブルのサイズが小さくなるよう列ストア インデックスを再構築して、テーブルを読み取るために必要なディスク I/O を削減します。 列ストア インデックスを再構築するには、ALTER INDEX ステートメントの REBUILD オプションを使用します。
更新可能な列ストアは、最初に新しいデータを OPEN 行グループに挿入します。これは行ストア形式であり、デルタ テーブルとも呼ばれます。 開いている行グループがいっぱいになると、その状態は CLOSED に変わります。 閉じた行グループはタプル ムーバーによって列ストア形式に圧縮され、状態は COMPRESSED に変わります。 タプル ムーバーは、定期的に起動し、列ストア行グループに圧縮する準備ができている閉じた行グループがあるかどうかを確認するバックグラウンド プロセスです。 また、組ムーバーは、すべての行が削除された行グループの割り当てを解除します。 割り当て解除された行グループは、 TOMBSTONE としてマークされます。 タプル ムーバーをすぐに実行するには、ALTER INDEX ステートメントの REORGANIZE オプションを使用します。
列ストア行グループは、いっぱいになると圧縮され、新しい行の受け入れを停止します。 圧縮されたグループから行が削除されると、削除された行は、保持されますが、削除済みとしてマークされます。 圧縮されたグループに対する更新は、圧縮されたグループからの削除、および OPEN 状態のグループへの挿入として実装されます。
アクセス許可
ユーザーがテーブルに対する VIEW DEFINITION
権限を持っている場合は、テーブルの情報を返します。
カタログ ビューでのメタデータの可視性は、ユーザーが所有しているか、ユーザーに何らかのアクセス許可が付与されているセキュリティ保護可能なリソースに限定されます。 詳細については、「 Metadata Visibility Configuration」を参照してください。
例
次の例では、 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)
カタログ ビュー (Transact-SQL)
SQL Server システム カタログに対するクエリに関してよく寄せられる質問
sys.columns (Transact-SQL)
sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-SQL)
列ストア インデックスの説明
sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)