gpt4 book ai didi

sql-server - Sql 调试查询与 Management Studio 中的调试同时运行 - 锁定数据会挂起查询

转载 作者:行者123 更新时间:2023-12-03 00:23:11 25 4
gpt4 key购买 nike

场景:我正在调试一些存储过程并遇到了断点。

我现在想要执行一些查询,以便进一步调试问题。 我该怎么做?

我尝试从新的查询窗口执行查询,但似乎调试经验已锁定所有表。

即时窗口似乎也遇到了同样的问题。

最佳答案

I have tried executing query from a new query window, but it seems the debugging experience has locked all of the tables

这正是您正在调试的存储过程执行时会发生的情况,因此这是一个值得发现的“好”事情。发生“挂起”是因为您的 Proc 持有此数据的锁(例如,作为 INSERTUPDATE 的结果)并且尚未提交其事务。尝试在隔离级别(例如 READ COMMITTED(通常是默认设置))上读取未提交数据的其他连接将阻塞,直到 PROC 通过提交或回滚释放这些锁。

您可以通过在该连接上设置较弱的隔离级别来读取其他临时调试查询连接上过去的(大多数)锁定,例如

-- Separate debugging query when the breakpoint is set on the actual code
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableLockedByProcBeingDebugged WHERE ...

或与NOLOCK

SELECT * FROM TableLockedByProcBeingDebugged (NOLOCK) WHERE ...

这应该允许您读取数据的 transient 。

只是为了说明显而易见的事情:

  • 仅将此用于调试 - 正如隔离级别所建议的那样,READ UNCOMMITTED 尚未提交,并且可能会在页面拆分期间返回幽灵读取,甚至重复读取。
  • 如果 PROC 正在升级锁定(例如从行到整个表),您将需要解决这个问题,例如通过一次更新更少的记录。

关于sql-server - Sql 调试查询与 Management Studio 中的调试同时运行 - 锁定数据会挂起查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com