我有一个WCF应用程序,有5-6 EF模型在它。在生产环境中,将只运行此应用程序的一个实例。
但在开发过程中,有5个开发人员同时在开发它。(针对同一数据库。)
我们注意到,有时SQL Server2008 R2 DB上的表会被锁定。这似乎是当某人正在进行一步一步的调试,并不得不将其放在一个步骤上几分钟。
我很好奇为什么EF会在一张桌子上保持一个锁。如何使用EF锁定一个表?我能做些什么来防止这种情况发生?
注意:此应用程序访问WCF Data Services (OData)终结点以获取其某些数据(来自同一数据库)。我不知道OData将如何锁定数据库,但我想我会提到它,以防它很重要。
发布于 2012-01-26 03:24:18
只有一个解决方案。每个开发人员都将在本地安装数据库,并在自己的环境中运行调试会话!其他的都是错误的开发环境。使用SQL Server Express或SQL Server Developer edition。
发布于 2012-01-26 02:13:50
我们所能做的就是尝试各种猜测。例如:如果您的数据模型缺少适当的索引,那么记录查找将转换为表扫描,并将escalate locks扫描到表级。
真正的解决方案是适当地调查阻塞。到底是什么导致了阻塞,到底是什么资源在等待?哪个会话/事务/语句持有其他会话/事务/语句所需的资源。
使用Activity Monitor、who_is_active或sp_blitz。阅读Waits and Queues白皮书。
https://stackoverflow.com/questions/9007631
复制相似问题