Sql-Server

SQL Server 2019 列儲存索引 - 維護

  • January 9, 2021

我在用於記錄的表上有一個聚集列儲存索引 - 僅插入(但不是批量插入)。目前的表統計數據是:

  • 35.41 億行
  • 6.6 GB 預留空間

我今天早上通過以下方式看到了以下操作sp_whoisactive

ALTER INDEX [...] ON [...].[...] 
REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);

我使用以下查詢來檢查我們有多少行row_group_id

SELECT
   tables.name AS table_name,
   indexes.name AS index_name,
   partitions.partition_number,
   dm_db_column_store_row_group_physical_stats.row_group_id,
   dm_db_column_store_row_group_physical_stats.total_rows,
   dm_db_column_store_row_group_physical_stats.deleted_rows,
   dm_db_column_store_row_group_physical_stats.state_desc,
   dm_db_column_store_row_group_physical_stats.trim_reason_desc
FROM sys.dm_db_column_store_row_group_physical_stats
INNER JOIN sys.indexes
ON indexes.index_id = 
   dm_db_column_store_row_group_physical_stats.index_id
AND indexes.object_id = 
   dm_db_column_store_row_group_physical_stats.object_id
INNER JOIN sys.tables
ON tables.object_id = indexes.object_id
INNER JOIN sys.partitions
ON partitions.partition_number = 
   dm_db_column_store_row_group_physical_stats.partition_number
AND partitions.index_id = indexes.index_id
AND partitions.object_id = tables.object_id

我們在最後一行和幾3383行分組,如下所示:1048576

在此處輸入圖像描述

問題是我們使用的是標準版(本地)並且重建操作沒有線上執行並導致大量阻塞。

我以前從未見過這樣的問題。幾週前,我們已經從SQL Server 2016 SP1SQL升級Server 2019

我的問題是:

  • 如果只應用插入,應該是操作reorganize並且更快
  • 如果不是,如果我們應用分區,例如在表用於日誌記錄時以年份為基礎,自動化過程是否只會重建最後一個分區的數據

在此處輸入圖像描述

我在用於記錄的表上有一個聚集的列儲存索引 - 僅插入

如果只應用插入,應該是操作重組並更快

你甚至不應該打擾。為列儲存重新組織:

當邏輯刪除 10% 或更多的行時,從行組中物理刪除行。刪除的字節在物理介質上回收。例如,如果 100 萬行的壓縮行組刪除了 100K 行,SQL Server 將刪除已刪除的行並重新壓縮包含 900k 行的行組。它通過刪除已刪除的行來節省儲存空間。

組合一個或多個壓縮行組以將每個行組的行數增加到最多 1,048,576 行。例如,如果您批量導入 5 批 102,400 行,您將獲得 5 個壓縮行組。如果您執行 REORGANIZE,這些行組將合併為 1 個大小為 512,000 行的壓縮行組。這假設沒有字典大小或記憶體限制。

對於其中 10% 或更多行已被邏輯刪除的行組,數據庫引擎會嘗試將此行組與一個或多個行組組合。例如,行組 1 壓縮為 500,000 行,行組 21 壓縮為最多 1,048,576 行。行組 21 刪除了 60% 的行,剩下 409,830 行。數據庫引擎傾向於組合這兩個行組來壓縮一個包含 909,830 行的新行組。

特定於重組列儲存索引的注意事項

所以它所要做的就是將打開的行組組合成一個新的壓縮行組。然後下次插入任何內容時,您將獲得新的打開行組。因此,在您的場景中 REORGANIZE 並沒有真正的好處。

正如 JD 建議的那樣,您可以對該表進行分區,以便僅將歸檔壓縮應用於較舊的分區。但是你的壓縮已經很好了。

引用自:https://dba.stackexchange.com/questions/282893