是否可以记录在SQL Server上执行的每个查询的文本?

问题描述:

我们有这种反复出现的情况,我们的应用程序每周几次停止响应。我想要做的是能够查看在SQL Server上运行的查询的文本。是否可以记录在SQL Server上执行的每个查询的文本?

我可以使用sp_who来查看打开的连接,但它不显示实际的查询文本。

如果我能看到冻结我的数据库的查询,我可以有一个优化的起点。

这发生在几分钟前,我们的系统管理员不得不重新启动这个盒子。这种重新启动是不可持续的。

我应该采取哪些措施?

我想查看在我的服务器上运行的查询的实际文本。

SQL Server 2000的

+0

SSMS>工具> SQL Server Profiler中 – 2012-01-13 21:49:28

使用此而块正在发生的事情:

SELECT 
    r.session_id AS spid 
     ,r.cpu_time,r.reads,r.writes,r.logical_reads 
     ,r.blocking_session_id AS BlockingSPID 
     ,LEFT(OBJECT_NAME(st.objectid, st.dbid),50) AS ShortObjectName 
     ,LEFT(DB_NAME(r.database_id),50) AS DatabaseName 
     ,s.program_name 
     ,s.login_name 
     ,OBJECT_NAME(st.objectid, st.dbid) AS ObjectName 
     ,SUBSTRING(st.text, (r.statement_start_offset/2)+1,((CASE r.statement_end_offset 
                    WHEN -1 THEN DATALENGTH(st.text) 
                    ELSE r.statement_end_offset 
                   END - r.statement_start_offset 
                  )/2 
                  ) + 1 
       ) AS SQLText 
    FROM sys.dm_exec_requests       r 
     JOIN sys.dm_exec_sessions      s ON r.session_id = s.session_id 
     CROSS APPLY sys.dm_exec_sql_text (sql_handle) st 
    WHERE [email protected]@SPID 

这将列出所有活动的SPID,谁阻止他们,每个SPID

编辑的SQL
这个查询是针对SQL Server 2005+的,最初的问题没有说明SQL Server 2000

+0

我得到这个错误“消息174,15级,状态1,第5行 的OBJECT_NAME函数需要1个参数”运行上面的SQL – holaSenor 2012-01-13 21:56:04

+0

时候还什么是后面的空白空间“FROM sys.dm_exec_requests'和'JOIN sys.dm_exec_sessions'? – holaSenor 2012-01-13 21:57:01

+0

sql server 2000?空白是这样的所有表别名值对齐,我发现很容易看到很多连接,并迅速看到所有的别名值 – 2012-01-13 21:57:14

有关sp_blocker_pss08(与SQL Server 2000兼容的脚本)的定义,请参阅文章How to monitor blocking in SQL Server 2005 and in SQL Server 2000