SQL Serverで実行された各クエリのテキストをログに記録することは可能ですか?

StackOverflow https://stackoverflow.com/questions/8857674

質問

週に数回、アプリケーションが応答しなくなるこの繰り返しの状況があります。私がやりたいのは、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互換スクリプト)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top