这可能是非常基本的,所以忍受我(另一方面,这可能是一个很好的闪亮切割和干燥的答案!)。
我现在正在诊断一个死锁问题,事实上我可以看到我的一个会话被另一个会话阻止了。 (死锁的另一端是Java线程,它们以相反的顺序相互等待。)在Management Studio的进程资源管理器中显示进程的详细信息,为我提供了阻塞会话的SQL,但是块的SQL ing < / em>会话仅显示为“EXEC sp_unprepare 807
”。
现在我明白这与准备好的陈述有关,因此我对此并不感到不安。但是,我想知道实际的SQL是什么,所以我知道在代码库中投下一个可疑的眼睛。那么在这一点上,将此与此线程执行的实际SQL相关联的最佳方法是什么?是否有系统表,我可以在其中查找预准备语句到SQL的映射?也许是一个存储会话的最后 n SQL语句的表,希望能够保持prepare
调用吗?我可以在数据库驱动程序连接上设置一个标志,它将为此会话完全禁用预准备语句吗?
我也欢迎这个问题的替代方法,如果它们是更好的方法(基本上我非常怀疑有一些Java代码在修改表后无法提交,我想知道SQL帮助我找出它的位置。
答案 0 :(得分:1)
试试这个
dbcc inputbuffer(spid)
答案 1 :(得分:0)
使用SQL事件探查器跟踪服务器上的活动,然后重新创建问题。使用服务器端游标时,SQL将使用数字作为句柄。您可以通过Profiler输出跟踪这些句柄,以查看使用该句柄执行的其他操作。在句柄和SPID之间,您可以跟踪工作负载并深入探索问题的原因。