代码之家  ›  专栏  ›  技术社区  ›  Andrzej Doyle

如何确定与SQL Server的sp_unprepare调用对应的SQL?

  •  0
  • Andrzej Doyle  · 技术社区  · 17 年前

    这可能是非常基本的,所以请耐心听我说(另一方面,可能有一个很好的答案)。

    我正在诊断一个死锁问题,实际上我可以看到我的一个会话被另一个会话阻塞。(死锁的另一端是以相反顺序彼此等待的Java线程。)在Management Studio的process explorer中显示流程的详细信息,可以为被阻止的会话提供SQL,但为块提供SQL 惯性导航与制导 session只显示为“ EXEC sp_unprepare 807 ".

    现在我明白了,这与事先准备好的陈述有关,所以我对这一点本身并不感到不安。然而,我想知道实际的SQL是什么,这样我就知道在代码库中哪里可以投下怀疑的目光。那么,在这一点上,将其与该线程执行的实际SQL相关联的最佳方式是什么?是否有一个系统表,我可以在其中查找准备好的语句到它们的SQL的映射?也许是一张可以存放最后一张的桌子 N 会话的SQL语句,该会话有望 prepare 呼叫我是否可以在数据库驱动程序连接上设置一个标志,该标志将完全禁用此会话的准备语句?

    我也欢迎其他解决这个问题的方法,如果它们是更好的方法的话(基本上我高度怀疑有一些Java代码在修改表后无法提交,我想知道SQL以帮助我找到它在哪里)。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Thuglife    17 年前

    试试这个

    dbcc inputbuffer(spid)
    
        2
  •  0
  •   robsymonds    17 年前

    使用SQL事件探查器跟踪服务器上的活动,然后重新创建问题。当使用服务器端游标时,SQL将使用数字作为句柄。您可以通过探查器输出跟踪这些句柄,以查看使用该句柄执行的其他操作。在句柄和SPID之间,您可以跟踪工作负载并深入探讨问题的原因。