首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新DB事务中的COLUMNSTORE索引

更新DB事务中的COLUMNSTORE索引
EN

Stack Overflow用户
提问于 2021-05-14 23:49:07
回答 1查看 44关注 0票数 0

可以在DB事务中更新COLUMNSTORE索引吗?我想在transaction中使用以下SQL命令:

代码语言:javascript
复制
ALTER INDEX [IX_Name] ON [dbo].[TableName] REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON)

交易可能需要很长时间。其他SQL客户端是否能够在事务期间使用该索引?

EN

回答 1

Stack Overflow用户

发布于 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列查看。还要注意,删除或更新OPENCLOSED行组是就地进行的:对于删除,您将看到行数减少(更新不会更改行数),但是在这两种类型的行组中,您永远看不到任何deleted_rows

那么REORGANIZE做了什么呢?它读取小的和/或碎片化的行组并合并它们,但不是就地组合,而是将它们写出为新的行组,而旧行组的状态将更改为TOMBSTONE。当旧的行组具有活动的读取器时,它们将存在,而在REORGANIZE之后启动的事务将始终从新的行组读取数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67537176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档