首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锁定事务(SQL Server + EF5)

锁定事务(SQL Server + EF5)
EN

Stack Overflow用户
提问于 2019-02-06 18:30:06
回答 1查看 41关注 0票数 0

我正在尝试调试使用.NET 4.5、EF5 (具有二级缓存和延迟加载的导航属性)和SQL Server2014的ASP.NET应用程序中的性能问题。我们在SQL服务器中遇到了许多等待锁。当我查看锁定事务时,它们包含一个非常快速的更新,然后是一个非常大的SELECT。从表面上看,更新是必要的,但我搞不懂为什么SELECT在同一个事务中运行(以及为什么选择任何东西)。基本问题是UPDATE语句中引用的表在SELECT语句期间被锁定。

我们使用存储库模式从数据库获取数据,并使用DbContext.SaveChanges()提交更改。我不明白EF是如何产生一个同时有写和读的事务的,当我尝试搜索Google时,我没有得到相关的结果。

我们有许多进入系统的接口,还有几个在数据库上工作的控制台应用程序,但它们都通过相同的设置/版本的.NET和EF。

我认为它必须通过SaveChanges,因为这是(AFAIK)向数据库写入数据的唯一时间。

在座的任何人都有关于如何产生这些锁定事务的提示吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-06 18:43:01

基本问题是UPDATE语句中引用的表在SELECT语句期间被锁定。

答案就在你的问题里:

正在同一事务中运行SELECT

X锁始终保持到transaction的末尾,即直到它提交或回滚。因此,如果在快速update之后有一个长select,那么锁定在表中的所有update将保持锁定状态,直到select结束。

如果您的业务规则允许,您可以将updateselect分开,您可以在更新表上添加适当的index以仅锁定某些行而不是整个表,或者您可以优化您的select以加快执行速度。

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

https://stackoverflow.com/questions/54551415

复制
相关文章

相似问题

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