【问题标题】:Entity Framework / SQL Server database locks实体框架/SQL Server 数据库锁
【发布时间】:2019-02-25 04:28:23
【问题描述】:

我无法理解是什么锁定了我的 SQL Server 数据库。我正在通过实体框架从 SQL Server 数据库访问数据。在该 Web 应用程序运行时,我也在使用 SQL Server Management Studio 检查数据。

显然,当我尝试通过右键单击“选择前 n 行”来读取不同的表格时,我会收到一条消息

检索数据失败 - 超过锁定超时时间,错误 1222)。

当我通过Select * from ... 语句手动读取数据时不会发生这种情况,或者至少我还没有注意到。这两种方法有什么区别吗?

更重要的是,我怎样才能确定是什么锁定了我的数据库?我试图进行研究,但仍然不太具体了解该做什么。我尝试使用

DBCC opentran and than 
exec sp_who2 SPID
exec sp_lock SPID

这告诉我有一个来自实体框架的活动事务,但不知道具体是哪一个。我在我的应用程序中使用了一些事务。但我认为这些是在我试图通过 Management Studio 访问的其他表上。这些事务是否锁定了整个数据库?

感谢任何帮助。

【问题讨论】:

    标签: sql-server entity-framework transactions locking


    【解决方案1】:

    尝试使用 Adam Machanic 编写的出色存储过程 who_isActive:

    EXEC sp_WhoIsActive;
    

    此外,这个存储过程显示了一个可执行的 sql 文本。

    The stored procedure can be downloaded here.

    例如使用session_id = 75 的查询正在等待使用session_id = 90 的查询:

    这是你被屏蔽的原因。

    sp_who2 也是一个很棒的程序。例如。:

    然后你应该决定是否应该杀死这个进程:

    KILL YourNumberOfSessionID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多