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

时间:2019-01-31 12:38:57

标签: sql-server sql-server-2016 columnstore

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

它不应该在该列上显示一些值吗?我正在读取列存储索引上的行不会被删除,而是标记为删除,它们应该出现在sys.dm_db_column_store_row_group_physical_stats的delete_rows列上。

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

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

    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'

1 个答案:

答案 0 :(得分:0)

只需在此链接上找到答案:

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命令将它们移至位图。

致谢