列存储索引 - 检查删除的行
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 上找到了答案:
使用非聚集列存储索引,删除的行首先进入 COLUMN_STORE_DELETE_BUFFER,可以在 sys.internal_partitions 上看到。
它们仅在删除的行超过 1048576 时转到已删除的位图(因此可以在 sys.dm_db_column_store_row_group_physical_stats 上进行检查)。它们可以通过后台 Tuple Mover 线程或显式 Reorganize 命令移动到位图中。
此致
我有一个 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 上找到了答案:
使用非聚集列存储索引,删除的行首先进入 COLUMN_STORE_DELETE_BUFFER,可以在 sys.internal_partitions 上看到。
它们仅在删除的行超过 1048576 时转到已删除的位图(因此可以在 sys.dm_db_column_store_row_group_physical_stats 上进行检查)。它们可以通过后台 Tuple Mover 线程或显式 Reorganize 命令移动到位图中。
此致