0

週に数回、アプリケーションが応答を停止するという状況が繰り返し発生します。私がやりたいことは、SQL Server で実行されているクエリのテキストを表示できるようにすることです。

開いている接続を表示するために使用できますsp_whoが、実際のクエリ テキストは表示されません。

データベースをフリーズさせているクエリを確認できれば、最適化の開始点を得ることができます。

これは数分前に発生し、システム管理者はボックスを再起動する必要がありました。この再起動は持続可能ではありません。

どのような手順を踏む必要がありますか?

サーバーで実行されているクエリの実際のテキストを確認したいと考えています。

SQL Server 2000

4

2 に答える 2

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 が一覧表示されます。

EDIT
このクエリは SQL Server 2005+ 用です。最初の質問では SQL Server 2000 は記載されていませんでした

于 2012-01-13T21:50:48.037 に答える
0

(SQL Server 2000 互換スクリプト)の定義については、記事「SQL Server 2005 および SQL Server 2000 でブロッキングを監視する方法」を参照してください。sp_blocker_pss08

于 2012-01-13T22:11:06.297 に答える