首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在快照隔离中选择块更新

在快照隔离中选择块更新
EN

Database Administration用户
提问于 2018-05-02 18:59:29
回答 1查看 641关注 0票数 1

我们有一个运行在Server 2016 SP1企业上的数据库,并在其上启用了Allow Snapshot Isolation。在这种情况下,读取器不阻塞作者,编写器不阻止读取器。

今天,我们看到一个SELECT-query阻塞了一个UPDATE-query。以下是所讨论的问题:

第一个查询:

代码语言:javascript
复制
IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT
SELECT TOP 10 Field1, Field2, Field3 FROM [dbo].[TABLE1] 
WHERE ([Field1] = @SV1 AND (1=1))
ORDER BY A.[Field1] ASC,A.[Field2] ASC
OPTION (KEEP PLAN, KEEPFIXED PLAN, LOOP JOIN)

第二个查询:

代码语言:javascript
复制
UPDATE [dbo].[Table1] SET [Field4]= @V128, [Field5]= @V140, [Field6]= @V141 WHERE [Field3] = @ID0

如果理解版本控制正确,则SELECT-query不使用任何锁,因为它对数据的快照起作用(在事务开始时获取)。SELECT-query如何阻止UPDATE

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-05-02 19:38:38

如果@@trancount <> 0,则该选择将以当前事务隔离级别运行。这(除非已经是快照)需要S锁才能读取数据。

如果希望所有选择使用默认的READ提交隔离级别来使用行版本控制而不是S锁,请在数据库上设置READ提交快照。

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

https://dba.stackexchange.com/questions/205608

复制
相关文章

相似问题

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