SQL Serverで実行された各クエリのテキストをログに記録することは可能ですか?
-
28-10-2019 - |
質問
週に数回、アプリケーションが応答しなくなるこの繰り返しの状況があります。私がやりたいのは、SQL Serverで実行されているクエリのテキストを表示できることです。
使うことができます sp_who
オープン接続を表示するには、実際のクエリテキストを表示しません。
データベースを凍結しているクエリを見ることができれば、最適化の出発点を持つことができます。
これは数分前に起こり、SYS管理者はボックスを再起動する必要がありました。この再起動は持続可能ではありません。
どんな手順をとるべきですか?
サーバーで実行されているクエリの実際のテキストをご覧ください。
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 r.session_id!=@@SPID
これにより、それらをブロックしているすべてのアクティブなSPIDと各SPIDのSQLがリストされます
編集
このクエリはSQL Server 2005+の場合、最初の質問はSQL Server 2000を述べていませんでした
他のヒント
記事を参照してください SQL Server 2005およびSQL Server 2000でブロッキングを監視する方法 の定義のため sp_blocker_pss08
(SQL Server 2000互換スクリプト)。
所属していません StackOverflow