可以在DB事务中更新COLUMNSTORE索引吗?我想在transaction中使用以下SQL命令:
ALTER INDEX [IX_Name] ON [dbo].[TableName] REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON)交易可能需要很长时间。其他SQL客户端是否能够在事务期间使用该索引?
发布于 2021-10-09 02:51:02
请注意,如果没有指定隐式事务,SQL中的所有内容都会在它自己的隐式事务中运行,所以如果您只运行REORGANIZE,那么在BEGIN/COMMIT中运行它和包装它没有区别。
COMPRESSED行组是不可变的,所以让我们针对您的场景使用碎片整理而不是更新。在列存储世界中,更新转换为delete + insert,而delete是“延迟的”。更具体地说,删除反映在已删除的位图中,引擎将该位图与数据联接,并返回事务可见的行。删除位图的每行分组状态可以在sys.dm_db_column_store_row_group_physical_stats DMV中作为deleted_rows列查看。还要注意,删除或更新OPEN或CLOSED行组是就地进行的:对于删除,您将看到行数减少(更新不会更改行数),但是在这两种类型的行组中,您永远看不到任何deleted_rows。
那么REORGANIZE做了什么呢?它读取小的和/或碎片化的行组并合并它们,但不是就地组合,而是将它们写出为新的行组,而旧行组的状态将更改为TOMBSTONE。当旧的行组具有活动的读取器时,它们将存在,而在REORGANIZE之后启动的事务将始终从新的行组读取数据。
https://stackoverflow.com/questions/67537176
复制相似问题