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

时间:2012-01-13 21:47:59

标签: sql-server tsql sql-server-2000 database-performance

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

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

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

这发生在几分钟前,我们的系统管理员必须重新启动该框。这种重新启动是不可持续的。

我应该采取什么措施?

我希望看到我服务器上运行的查询的实际文本。

SQL Server 2000

2 个答案:

答案 0 :(得分:1)

在阻止发生时使用它:

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 r.session_id!=@@SPID

这将列出阻止它们的所有活动SPID以及每个SPID的SQL

修改
此查询适用于SQL Server 2005+,初始问题未说明SQL Server 2000

答案 1 :(得分:0)

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