这可能是非常基本的,所以请耐心等待(另一方面,可能有一个很好的闪亮的干货答案!)。
我目前正在诊断一个死锁问题,实际上我可以看到我的一个会话被另一个会话阻止了。(死锁的另一端是 Java 线程以相反的顺序相互等待。)在 Management Studio 的进程资源管理器中显示进程的详细信息为我提供了阻塞会话的 SQL,但阻塞会话的 SQL仅显示作为“ EXEC sp_unprepare 807
”。
现在我明白这与准备好的陈述有关,所以我本身并不为此感到不安。但是,我想知道实际的 SQL 是什么,这样我就知道在代码库中的何处投下怀疑的眼光。那么在这一点上,将其与该线程执行的实际 SQL 相关联的最佳方法是什么?是否有一个系统表,我可以在其中查找准备好的语句到他们的 SQL 的映射?可能是一个存储会话的最后n 个SQL 语句的表,该会话有望保持prepare
调用?是否可以在数据库驱动程序连接上设置一个标志,以完全禁用此会话的准备好的语句?
我也欢迎解决这个问题的替代方法,如果它们是更好的方法(基本上我高度怀疑有一些 Java 代码在修改表后无法提交,我想知道 SQL 来提供帮助我找出它在哪里)。