sys.pdw_nodes_column_store_row_groups (Transact-SQL)
適用対象: Azure Synapse Analytics Analytics Platform System (PDW)
Azure Synapse Analytics で管理者がシステム管理を決定できるように、セグメントごとにクラスター化列ストア インデックス情報を提供します。 sys.pdw_nodes_column_store_row_groups には、物理的に格納されている行の合計数 (削除済みとしてマークされているものを含む) の列と、削除済みとしてマークされた行数の列があります。 sys.pdw_nodes_column_store_row_groupsを使用して、削除された行の割合が高く、再構築する必要がある行グループを決定します。
列名 | データ型 | 説明 |
---|---|---|
object_id | int | 基になるテーブルの ID。 これはコンピューティング ノード上の物理テーブルであり、制御ノードの論理テーブルのobject_idではありません。 たとえば、object_idが sys.tables のobject_idと一致しません。 sys.tables と結合するには、sys.pdw_index_mappingsを使用します。 |
index_id | int | object_id テーブルのクラスター化列ストア インデックスの ID。 |
partition_number | int | 行グループの row_group_idを保持するテーブル パーティションの ID。 partition_numberを使用して、この DMV を sys.partitions に参加させることができます。 |
row_group_id | int | この行グループの ID。 これはパーティション内で一意です。 |
dellta_store_hobt_id | bigint | デルタ行グループの hobt_id で、行グループの種類がデルタではない場合は NULL。 デルタ行グループとは、新しいレコードを受け入れる読み取り/書き込み行グループのことです。 デルタ行グループには、 OPEN 状態があります。 デルタ行グループは、行ストア形式のままであり、列ストア形式に圧縮されていません。 |
state | tinyint | state_descriptionに関連付けられている ID 番号。 1 = OPEN 2 = CLOSED 3 = COMPRESSED |
state_desccription | nvarchar(60) | 行グループの永続的な状態の説明: OPEN - 新しいレコードを受け入れる読み取り/書き込み行グループ。 開いている行グループは引き続き行ストア形式であり、列ストア形式に圧縮されていません。 CLOSED - タプル ムーバー プロセスによって塗りつぶされたが、まだ圧縮されていない行グループ。 COMPRESSED - 塗りつぶしと圧縮が行われる行グループ。 |
total_rows | bigint | 行グループに物理的に格納されている行の合計。 一部は削除されている可能性がありますが、まだ保存されています。 行グループ内の行の最大数は 1,048,576 (16 進数の FFFFF) です。 |
deleted_rows | bigint | 削除対象としてマークされている行グループに物理的に格納されている行の数。 DELTA 行グループの場合は常に 0。 |
size_in_bytes | int | この行グループ内のすべてのページの合計サイズ (バイト単位)。 このサイズには、メタデータまたは共有ディクショナリを格納するために必要なサイズは含まれません。 |
pdw_node_id | int | Azure Synapse Analytics ノードの一意の ID。 |
distribution_id | int | ディストリビューションの一意の ID。 |
解説
クラスター化列ストア インデックスまたは非クラスター化列ストア インデックスを持つテーブルごとに、列ストア行グループごとに 1 行を返します。
sys.pdw_nodes_column_store_row_groupsを使用して、行グループに含まれる行の数と行グループのサイズを決定します。
行グループ内の削除済みの行の数が合計行数に対して占める割合が高くなると、テーブルの効率が低下します。 テーブルのサイズが小さくなるよう列ストア インデックスを再構築して、テーブルを読み取るために必要なディスク I/O を削減します。 列ストア インデックスを再構築するには、ALTER INDEX ステートメントの REBUILD オプションを使用します。
更新可能な列ストアは、最初に新しいデータを OPEN 行グループに挿入します。これは行ストア形式であり、デルタ テーブルとも呼ばれます。 開いている行グループがいっぱいになると、その状態は CLOSED に変わります。 閉じた行グループはタプル ムーバーによって列ストア形式に圧縮され、状態は COMPRESSED に変わります。 タプル ムーバーは、定期的に起動し、列ストア行グループに圧縮する準備ができている閉じた行グループがあるかどうかを確認するバックグラウンド プロセスです。 また、組ムーバーは、すべての行が削除された行グループの割り当てを解除します。 割り当て解除された行グループは、 RETIRED としてマークされます。 タプル ムーバーをすぐに実行するには、ALTER INDEX ステートメントの REORGANIZE オプションを使用します。
列ストア行グループは、いっぱいになると圧縮され、新しい行の受け入れを停止します。 圧縮されたグループから行が削除されると、削除された行は、保持されますが、削除済みとしてマークされます。 圧縮されたグループに対する更新は、圧縮されたグループからの削除、および OPEN 状態のグループへの挿入として実装されます。
アクセス許可
VIEW SERVER STATE アクセス許可が必要です。
例: Azure Synapse Analytics、Analytics Platform System (PDW)
次の例では、 sys.pdw_nodes_column_store_row_groups テーブルを他のシステム テーブルに結合して、特定のテーブルに関する情報を返します。 計算済みの PercentFull
列は、行グループの効率の推定値を示します。 1 つのテーブルに関する情報を検索するには、WHERE 句の前にあるコメント ハイフンを削除し、テーブル名を指定します。
SELECT IndexMap.object_id,
object_name(IndexMap.object_id) AS LogicalTableName,
i.name AS LogicalIndexName, IndexMap.index_id, NI.type_desc,
IndexMap.physical_name AS PhyIndexNameFromIMap,
CSRowGroups.*,
100*(ISNULL(deleted_rows,0))/total_rows AS PercentDeletedRows
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.pdw_index_mappings AS IndexMap
ON i.object_id = IndexMap.object_id
AND i.index_id = IndexMap.index_id
JOIN sys.pdw_nodes_indexes AS NI
ON IndexMap.physical_name = NI.name
AND IndexMap.index_id = NI.index_id
JOIN sys.pdw_nodes_column_store_row_groups AS CSRowGroups
ON CSRowGroups.object_id = NI.object_id
AND CSRowGroups.pdw_node_id = NI.pdw_node_id
AND CSRowGroups.distribution_id = NI.distribution_id
AND CSRowGroups.index_id = NI.index_id
WHERE total_rows > 0
--WHERE t.name = '<table_name>'
ORDER BY object_name(i.object_id), i.name, IndexMap.physical_name, pdw_node_id;
次の Azure Synapse Analytics の例では、クラスター化列ストアのパーティションごとの行数と、Open、Closed、または Compressed 行グループの行数がカウントされます。
SELECT
s.name AS [Schema Name]
,t.name AS [Table Name]
,rg.partition_number AS [Partition Number]
,SUM(rg.total_rows) AS [Total Rows]
,SUM(CASE WHEN rg.State = 1 THEN rg.Total_rows Else 0 END) AS [Rows in OPEN Row Groups]
,SUM(CASE WHEN rg.State = 2 THEN rg.Total_Rows ELSE 0 END) AS [Rows in Closed Row Groups]
,SUM(CASE WHEN rg.State = 3 THEN rg.Total_Rows ELSE 0 END) AS [Rows in COMPRESSED Row Groups]
FROM sys.pdw_nodes_column_store_row_groups rg
JOIN sys.pdw_nodes_tables pt
ON rg.object_id = pt.object_id
AND rg.pdw_node_id = pt.pdw_node_id
AND pt.distribution_id = rg.distribution_id
JOIN sys.pdw_table_mappings tm
ON pt.name = tm.physical_name
INNER JOIN sys.tables t
ON tm.object_id = t.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
GROUP BY s.name, t.name, rg.partition_number
ORDER BY 1, 2
参照
Azure Synapse Analytics と Parallel Data Warehouse のカタログ ビュー
CREATE COLUMNSTORE INDEX (Transact-SQL)
sys.pdw_nodes_column_store_segments (Transact-SQL)
sys.pdw_nodes_column_store_dictionaries (Transact-SQL)