我有一个表,该表具有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'
答案 0 :(得分:0)
只需在此链接上找到答案:
对于非聚集列存储索引,已删除的行将首先进入COLUMN_STORE_DELETE_BUFFER,可在sys.internal_partitions上看到。
仅当删除的行超过1048576时,它们才会转到删除的位图(因此可以在sys.dm_db_column_store_row_group_physical_stats上进行检查)。可以通过后台Tuple Mover线程或显式的Reorganize命令将它们移至位图。
致谢