锁定交易(SQL服务器+ EF5)

问题描述 投票:0回答:1

我试图调试使用.NET 4.5 ASP.NET应用程序性能问题,EF5(具有2级缓存和延迟加载导航性能)和SQL Server 2014,我们正在经历的SQL服务器的一些等待锁。当我看到在锁定交易,它们包含了非常快速的更新,然后一个非常大的选择。更新表面上是一个必要条件,但我很困惑,为什么选择在同一个事务中运行(为什么事情正在以全部选中)。最根本的问题是,在UPDATE语句引用的表被锁定SELECT语句的持续时间。

我们使用从DB获得数据)提交变更资料库模式,DbContext.SaveChanges(。我无法弄清楚它是如何可能,哪里有既写和读EF产生一个事务,我没有得到相关的搜索结果,当我试图搜索谷歌。

我们有很多的接口集成到系统,和一对夫妇的数据库上工作的控制台应用程序为好,但他们都经历过相同的设置的.NET和EF /版本。

我估计,它必须通过调用SaveChanges,因为这是(据我所知),事情都写入到数据库中唯一的一次。

是否有人在这里有一个提示,这些锁定交易可能如何产生的?

asp.net sql-server entity-framework entity-framework-5 .net-4.5
1个回答
0
投票

最根本的问题是,在UPDATE语句引用的表被锁定SELECT语句的持续时间。

答案就在你的问题:

在SELECT是在同一个事务中运行

X锁总是保持直到transaction的末端,即直到它提交或回滚。所以,如果你的快速update后还有很长的select,所有update锁定在你的表保持锁定状态,直到你select结束。

您可以分开你的updateselect如果你的业务规则允许,你可以更新的表添加合适的index只锁定某些行,而不是整个表,或者您可以优化select执行得更快。

© www.soinside.com 2019 - 2024. All rights reserved.