是否可以记录在SQL Server上执行的每个查询的文本?
问题描述:
我们有这种反复出现的情况,我们的应用程序每周几次停止响应。我想要做的是能够查看在SQL Server上运行的查询的文本。是否可以记录在SQL Server上执行的每个查询的文本?
我可以使用sp_who
来查看打开的连接,但它不显示实际的查询文本。
如果我能看到冻结我的数据库的查询,我可以有一个优化的起点。
这发生在几分钟前,我们的系统管理员不得不重新启动这个盒子。这种重新启动是不可持续的。
我应该采取哪些措施?
我想查看在我的服务器上运行的查询的实际文本。
SQL Server 2000的
答
使用此而块正在发生的事情:
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
答
有关sp_blocker_pss08
(与SQL Server 2000兼容的脚本)的定义,请参阅文章How to monitor blocking in SQL Server 2005 and in SQL Server 2000。
SSMS>工具> SQL Server Profiler中 – 2012-01-13 21:49:28