sys.column_store_row_groups(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 中的 SQL 資料庫

依每個區段提供欄位商店索引資訊。

對於叢集欄位儲存索引, sys.column_store_row_groups 有一個欄位表示實體儲存的總列數(包含標記為已刪除的資料列),另一個欄位表示標記為已刪除的資料列數。 用 sys.column_store_row_groups 來判斷哪些列群組有高比例的刪除列,應該重建。

資料行名稱 資料類型 描述
object_id int 定義此索引的表格 ID。
index_id int 欄位儲存索引的 ID。
partition_number int 包含由 識別 row_group_id的列群的表格分割。 請使用 partition_number 以加入 sys.partitions
row_group_id int 與此數據列群組相關聯的數據列群組編號。 這個號碼在分割區內是唯一的。

-1 = 記憶體優化表的尾部。
delta_store_hobt_id bigint 那是 hobt_id 三角洲商店裡的 OPEN 一排群組。

如果列群組不在 delta 儲存庫裡,則使用 NULL。

NULL 用於記憶體優化資料表的尾部。
state tinyint 一個描述行群狀態的數字。

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = TOMBSTONE
state_description nvarchar(60) 列群狀態描述:

INVISIBLE - 一個隱藏的壓縮段,正在從 delta 儲存庫中的資料建構中。 讀取動作會使用delta儲存,直到看不見的壓縮區段完成。 然後,新的區段會顯示,並移除來源差異存放區。

OPEN - 一個接受新資料列的讀寫群組。 開啟的列群組仍是列存儲格式,並未壓縮成欄位存儲格式。

CLOSED - 一個已填充但尚未被元組移動程序壓縮的列群。

COMPRESSED - 一個被填充且壓縮的列群。
total_rows bigint 實際儲存在數據列群組中的數據列總數。 刪除的列可能仍然會被儲存。 一列群組中最大可行數為 1,048,576。
deleted_rows bigint 列群組中標記為已刪除但仍被儲存的列數。 此值始終 0 適用於 delta 列群組。

針對非叢集數據行存放區索引,此值不包含儲存在刪除緩衝區中的已刪除數據列。 如需詳細資訊,以及若要尋找刪除緩衝區中已刪除的資料列數目,請參閱 sys.internal_partitions
size_in_bytes bigint 此列群組中所有資料(不含元資料或共享字典)的位元組大小,適用於 delta store 與 columnstore 列群組。

備註

每個欄位儲存列群組,每個資料表中具有叢集或非叢集欄位儲存索引的分割區,回傳一列。

sys.column_store_row_groups 來查詢該列群組中有多少列以及列群組的大小。

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

可更新的欄位儲存器首先將新資料插入一個以列儲存格式呈現的開放列群組,有時也稱為 delta 表格。 一旦一個開的行群滿了,其狀態就會變為 CLOSED。 封閉的行群會被元組移動器壓縮成欄位儲存格式,狀態會改變為 COMPRESSED。 Tuple 行動器是一個背景進程,會定期喚醒並檢查是否有任何已關閉的數據列群組已準備好壓縮成數據行存放區數據列群組。 元組移動器也會釋放所有列被刪除的列群。 已釋放的行群組標記為 TOMBSTONE。 要立即執行元組移動器,請使用 REORGANIZEALTER INDEX 語句中的子句。

當 columnstore 的列群被填滿時,會被壓縮,停止接受新列。 當你從壓縮群組刪除列時,它們會保留,但會被標記為已刪除。 壓縮群組的更新會實作為壓縮群組的刪除,以及插入至開啟的群組。

權限

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

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

範例

以下範例將 sys.column_store_row_groups 檢視圖與其他系統檢視結合,以回傳有關叢集欄位儲存索引的資訊。 欄位 percent_full 是對該列群組效率的估計值。

SELECT i.object_id,
       OBJECT_SCHEMA_NAME(i.object_id) AS schema_name,
       OBJECT_NAME(i.object_id) AS table_name,
       i.name AS index_name,
       i.type_desc AS index_type_desc,
       rg.partition_number,
       rg.row_group_id,
       rg.state_description,
       rg.total_rows,
       rg.deleted_rows,
       rg.size_in_bytes,
       100 * (rg.total_rows - ISNULL(rg.deleted_rows, 0)) / total_rows AS percent_full
FROM sys.indexes AS i
     INNER JOIN sys.column_store_row_groups AS rg
         ON i.object_id = rg.object_id
        AND i.index_id = rg.index_id
WHERE INDEXPROPERTY(i.object_id, i.name, 'IsClustered') = 1
ORDER BY schema_name, table_name, index_name, row_group_id;

欲了解更多資訊,請參閱 檢查欄位儲存索引的碎片化