2017-03-09 9 views
0

特定のサーバーインスタンスで特定のデータベースに対して長期ブロック(1時間と仮定)クエリを自動的に検出して強制終了し、結果を報告してブロックされたブロッククエリを表示する方法自動的にブロックを停止し、結果を報告する

+1

[sp_whoIsActive](https://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-fi)これは実際に多くの人がDB監視ツールを使用しています。 – scsimon

答えて

0

あなたはこの1つは唯一のクエリと処理時間here

SELECT  r.start_time [Start Time],session_ID [SPID], 
     DB_NAME(database_id) [Database], 
     SUBSTRING(t.text,(r.statement_start_offset/2)+1, 
     CASE WHEN statement_end_offset=-1 OR statement_end_offset=0 
     THEN (DATALENGTH(t.Text)-r.statement_start_offset/2)+1 
     ELSE (r.statement_end_offset-r.statement_start_offset)/2+1 
     END) [Executing SQL], 
     Status,command,wait_type,wait_time,wait_resource, 
     last_wait_type 
FROM  sys.dm_exec_requests r 
OUTER APPLY sys.dm_exec_sql_text(sql_handle) t 
WHERE  session_id != @@SPID -- don't show this query 
AND   session_id > 50 -- don't show system queries 
ORDER BY r.start_time 

が表示され、ブロッキングプロセスを強制終了する場合

SELECT * FROM sys.dm_exec_requests 

ですべてのサーバーのトランザクションを見ることができます:

KILL [session_id] 
+0

SQLのジョブを作成してブロックを見つけ、それを殺してレポートを電子メールで送信したいのですが。 – Siri

+0

私はまだこれがあなたが必要と思うと思う。クエリは実行時間を与えます。クエリを実行するプログラムを作成し、しきい値を超える時間がかかるものを強制終了することができます。 –

関連する問題