共用方式為


sys.pdw_nodes_column_store_row_groups (Transact-SQL)

適用於:Azure Synapse Analytics Analytics 平台系統 (PDW)

根據每個區段提供叢集數據行存放區索引資訊,以協助系統管理員在 Azure Synapse Analytics 中做出系統管理決策。 sys.pdw_nodes_column_store_row_groups有一個數據行,用於實際儲存的數據列總數(包括標示為已刪除的數據列),以及標示為已刪除之數據列數目的數據行。 使用 sys.pdw_nodes_column_store_row_groups 來判斷哪些數據列群組具有高百分比的已刪除數據列,而且應該重建。

資料行名稱 資料類型 描述
object_id int 基礎表的標識碼。 這是計算節點上的實體數據表,而不是控件節點上邏輯數據表的object_id。 例如,object_id與 sys.tables 中的object_id不相符。

若要與 sys.tables 聯結,請使用 sys.pdw_index_mappings。
index_id int object_id 數據表上叢集數據行存放區索引的標識碼。
partition_number int 保存數據列群組 row_group_id之數據表分割區的標識碼。 您可以使用 partition_number 將此 DMV 聯結至 sys.partitions。
row_group_id int 此數據列群組的識別碼。 這在分割區中是唯一的。
dellta_store_hobt_id bigint 差異數據列群組的hobt_id;如果數據列群組類型不是差異,則為 NULL。 差異數據列群組是接受新記錄的讀取/寫入數據列群組。 差異數據列群組具有 OPEN 狀態。 差異數據列群組仍處於數據列存放區格式,而且尚未壓縮為數據行存放區格式。
state tinyint 與state_description相關聯的標識碼。

1 = OPEN

2 = CLOSED

3 = COMPRESSED
state_desccription nvarchar(60) 資料列群組持續狀態的描述:

OPEN - 接受新記錄的讀取/寫入數據列群組。 開啟的數據列群組仍處於數據列存放區格式,而且尚未壓縮為數據行存放區格式。

CLOSED - 已填入但尚未由 Tuple 行動器進程壓縮的數據列群組。

COMPRESSED - 已填入和壓縮的數據列群組。
total_rows bigint 實際儲存在數據列群組中的數據列總數。 有些可能已刪除,但仍會加以儲存。 數據列群組中的數據列數目上限為 1,048,576(十六進位 FFFFF)。
deleted_rows bigint 實際儲存在標示要刪除之數據列群組中的數據列數目。

DELTA 數據列群組一律為 0。
size_in_bytes int 這個數據列群組中所有頁面的合併大小,以位元組為單位。 此大小不包含儲存元數據或共用字典所需的大小。
pdw_node_id int Azure Synapse Analytics 節點的唯一標識符。
distribution_id int 散發的唯一標識碼。

備註

針對具有叢集或非叢集數據行存放區索引的每個數據表,各傳回一個數據行存放區數據列群組的數據列。

使用 sys.pdw_nodes_column_store_row_groups 來判斷數據列群組中包含的數據列數目,以及數據列群組的大小。

當數據列群組中刪除的數據列數目成長為總計數據列的百分比時,數據表會變得較不有效率。 重建數據行存放區索引以減少數據表的大小,減少讀取數據表所需的磁碟 I/O。 若要重建數據行存放區索引,請使用 ALTER INDEX 語句的 REBUILD 選項。

可更新的數據行存放區會先將新數據插入 OPEN 數據列群組,其格式為數據列存放區,有時也稱為差異數據表。 開啟的數據列群組已滿之後,其狀態會變更為 CLOSED。 關閉的數據列群組會由 Tuple 行動器壓縮成資料行存放區格式,而狀態會變更為 COMPRESSED。 Tuple 行動器是一個背景進程,會定期喚醒並檢查是否有任何已關閉的數據列群組已準備好壓縮成數據行存放區數據列群組。 Tuple 行動器也會解除分配已刪除每個資料列的任何資料列群組。 已解除分配的數據列群組會標示為 已淘汰。 若要立即執行 Tuple mover,請使用 ALTER INDEX 語句的 REORGANIZE 選項。

當數據行存放區數據列群組已填滿時,它會壓縮並停止接受新的數據列。 當數據列從壓縮群組中刪除時,它們會保持,但標示為已刪除。 壓縮群組的更新會實作為壓縮群組的刪除,以及插入至開啟的群組。

權限

需要 VIEW SERVER STATE 權限。

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

下列範例會將 sys.pdw_nodes_column_store_row_groups 數據表聯結至其他系統數據表,以傳回特定數據表的相關信息。 計算結果 PercentFull 列是數據列群組效率的估計值。 若要尋找單一數據表的資訊,請移除 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 範例會針對叢集數據行存放區計算每個數據分割的數據列,以及開啟、關閉或壓縮數據列群組中的數據列數目:

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 和平行處理資料倉儲目錄檢視
CREATE COLUMNSTORE INDEX (Transact-SQL)
sys.pdw_nodes_column_store_segments (Transact-SQL)
sys.pdw_nodes_column_store_dictionaries (Transact-SQL)