Share via


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 基礎資料表的識別碼。 這是計算節點上的實體資料表,而不是控制項節點上邏輯資料表的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)