sys.pdw_nodes_column_store_row_groups (Transact-SQL)

適用対象:Azure Synapse AnalyticsAnalytics Platform System (PDW)

Azure Synapse Analytics で管理者がシステム管理を決定できるように、セグメントごとにクラスター化列ストア インデックス情報を提供します。 sys.pdw_nodes_column_store_row_groups には、物理的に格納された行の合計数 (削除済みとしてマークされているものも含む) の列と、削除済みとしてマークされた行数の列があります。 sys.pdw_nodes_column_store_row_groupsを使用して、削除された行の割合が高く、再構築する必要がある行グループを決定します。

列名 データ型 説明
object_id int 基になるテーブルの ID。 これはコンピューティング ノード上の物理テーブルであり、Control ノード上の論理テーブルの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 です。 デルタ行グループは、行ストア形式のままであり、列ストア形式に圧縮されていません。
状態 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 Row グループの行数をカウントします。

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)