列存储索引 - 检查删除的行

Columnstore Indexes - Check Deleted Rows

我有一个 table,其中包含 7409825 行和一个非聚集列存储索引。我正在使用 dmv sys.dm_db_column_store_row_group_physical_stats 检查已删除的行。当我在 table 上发出删除并从 dmv 检查列 deleted_rows 时,它始终为零。

它不应该在该列上显示一些值吗?我读到列存储索引上的行未被删除,但被标记为删除,它们应该出现在 sys.dm_db_column_store_row_group_physical_stats 的 deleted_rows 列上。

我在增量存储中没有行组,所有行组都压缩在列存储中。

我正在使用此代码检查已删除的行

    SELECT  OBJECT_NAME(CSRowGroups.object_id)as tab,
            CSRowGroups.*
    FROM sys.indexes AS i 
    INNER JOIN sys.objects o
      ON (i.object_id = o.object_id) 
    INNER JOIN sys.dm_db_column_store_row_group_physical_stats AS  CSRowGroups  
      ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_id 
    WHERE o.name = 'TableName'

刚刚在这个 link 上找到了答案:

https://www.mssqltips.com/sqlservertip/4280/sql-server-2016-columnstore-index-enhancements--system-views-for-diskbased-tables/

使用非聚集列存储索引,删除的行首先进入 COLUMN_STORE_DELETE_BUFFER,可以在 sys.internal_partitions 上看到。

它们仅在删除的行超过 1048576 时转到已删除的位图(因此可以在 sys.dm_db_column_store_row_group_physical_stats 上进行检查)。它们可以通过后台 Tuple Mover 线程或显式 Reorganize 命令移动到位图中。

此致