sys.column_store_row_groups (Transact-SQL)

適用於:SQL Server 2012 (11.x) 和更新版本 Azure SQL 受控執行個體

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

資料行名稱 資料類型 描述
object_id int 定義此索引之數據表的識別碼。
index_id int 具有此數據行存放區索引之數據表的索引標識碼。
partition_number int 保存數據列群組row_group_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相關聯的標識碼。

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = TOMBSTONE
state_description nvarchar(60) 資料列群組持續狀態的描述:

INVISIBLE -在從差異存放區中的數據建置過程中隱藏的壓縮區段。 讀取動作會使用差異存放區,直到隱藏的壓縮區段完成為止。 然後,新的區段會顯示,並移除來源差異存放區。

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

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

COMPRESSED - 已填入和壓縮的數據列群組。
total_rows bigint 實際儲存在數據列群組中的數據列總數。 有些可能已刪除,但仍會加以儲存。 數據列群組中的數據列數目上限為 1,048,576(十六進位 FFFFF)。
deleted_rows bigint 標示為已刪除之數據列群組中的數據列總數。 對於 DELTA 數據列群組,這一律為 0。
size_in_bytes bigint 針對 DELTA 和 COLUMNSTORE 數據列群組,大小為此數據列群組中所有數據的位元組(不包括元數據或共用字典)。

備註

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

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

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

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

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

權限

如果使用者具有 VIEW DEFINITION 數據表的許可權,則傳回數據表的資訊。

目錄檢視中元數據的可見度僅限於用戶擁有的安全性實體,或用戶獲授與某些許可權的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration

範例

下列範例會將 sys.column_store_row_groups 數據表聯結至其他系統數據表,以傳回特定數據表的相關信息。 計算結果 PercentFull 列是數據列群組效率的估計值。 若要尋找單一數據表的資訊,請移除 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)