sys.column_store_row_groups (Transact-SQL)

提供以每個區段為基礎的叢集資料行存放區索引資訊,協助系統管理員做出系統管理決策。 sys.column_store_row_groups 中,有一個資料行代表實際儲存的資料列總數 (包括標示為已刪除的資料列),以及另一個資料行代表標示為已刪除的資料列數目。 使用 sys.column_store_row_groups 可判斷出哪些資料列群組擁有較高百比例的已刪除資料列,應進行重建。

適用於:SQL Server (SQL Server 2014 至目前版本)。

資料行名稱

資料類型

描述

object_id

int

定義此索引所在資料表的識別碼。

index_id

int

內含此資料行存放區索引之資料表的索引識別碼。

partition_number

int

保存資料列群組 row_group_id 之資料表分割區的識別碼。 您可以使用 partition_number 將此 DMV 聯結至 sys.partitions。

row_group_id

int

與此資料列群組相關聯的資料列群組號碼。 此號碼在分割區中是唯一的。

delta_store_hobt_id

bigint

差異資料列群組的 hobt_id,如果資料列群組類型不是差異,則為 NULL。 差異資料列群組是讀取/寫入資料列群組,可接受新記錄。 差異資料列群組擁有 OPEN 狀態。 差異資料列群組仍採用資料列存放區格式,且尚未壓縮為資料行存放區格式。

state

tinyint

與 state_description 相關聯的識別碼。

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

state_desccription

nvarchar(60)

資料列群組的持續狀態描述:

INVISIBLE - 正在從差異存放區中的資料建立隱藏的壓縮區段。 讀取動作將會使用差異存放區,直到不可見的壓縮區段完成為止。 然後新的區段會變成可見,並移除來源差異存放區。

OPEN – 讀取/寫入資料列群組,可接受新記錄。 開啟的資料列群組仍採用資料列存放區格式,且尚未壓縮為資料行存放區格式。

CLOSED – 已填滿但尚未壓縮 Tuple Mover 程序壓縮的資料列群組。

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 Mover 壓縮為資料行存放區格式,其狀態會變更為 COMPRESSED。 Tuple Mover 是背景處理序,會定期喚醒並檢查是否有任何準備好壓縮為資料行存放區資料列群組的關閉資料列群組。 Tuple Mover 也會取消配置其中所有資料列都已刪除的任何資料列群組。 取消配置的資料列群組會標示為 RETIRED。 若要立即執行 Tuple Mover,請使用 ALTER INDEX 陳述式的 REORGANIZE 選項。

當資料行存放區資料列群組已滿時,就會進行壓縮,並停止接受新的資料列。 資料列從壓縮的群組中刪除時仍會持續存在,但會標示為已刪除。 對壓縮的群組進行更新的實作方式,是從壓縮的群組中刪除,然後插入開啟的群組。

權限

如果使用者具有資料表的 VIEW DEFINITION 權限,則傳回資料表的資訊。

目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。 如需詳細資訊,請參閱<中繼資料可見性組態>。

範例

下列範例會將 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)

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)

概念

查詢 SQL Server 系統目錄 FAQ

資料行存放區索引說明

資料行存放區索引說明