SQL Server 2008 R2の長時間実行クエリまたはデッドロックに関する通知


15

デッドロック時に通知を送信する方法があるかどうか知りたいですか?その場合、どのクエリが必要になるでしょう。SQL Serverはデッドロックを処理することを理解しています。関連するクエリに関する情報が欲しいだけです。

長時間実行されるクエリを特定するために、次のことがわかりました。

SELECT 
    creation_time
    ,last_execution_time
    ,total_physical_reads
    ,total_logical_reads
    ,total_logical_writes
    , execution_count
    , total_worker_time
    , total_elapsed_time
    , total_elapsed_time / execution_count avg_elapsed_time
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
        WHEN -1 THEN DATALENGTH(st.text)
        ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st  
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC; 

上記が正しい方法であるかどうか、または示されているようにクエリが特定の間隔、たとえば5分より長くかかっているかどうかを判断するより良い方法がありますか?

ありがとう

回答:


8

SQL 2008には、デッドロックと長時間実行されるクエリに使用できる新しい機能、拡張イベントがあります。拡張イベントは低レベルのオブジェクトであり、プロファイリング/トレース、アラートなどの他のメソッドよりもはるかに少ないリソースを消費します...

SQLサーバーMVPであるJonathan Kehayiasによるdeadlocksこの投稿をチェックして拡張イベントを使用してください。

拡張イベントを使用して検索するにlong running queriesは、別のSQLサーバーMVPであるPinal Daveによるこの詳細な投稿をご覧ください。


10

SQLエージェントを使用して、これらの両方のアラートを構成できます。新しいアラートを作成し、タイプ「SQL Serverパフォーマンス条件アラート」を選択します

長時間実行されるクエリの場合は、オブジェクト「MSSQL $ InstanceName:Transactions」およびCounter:Longest Transaction Running Timeを選択します。値とアラート通知オプションを設定すれば、準備完了です。

デッドロックの場合、オブジェクトは「MSSQL $ InstanceName:Locks」であり、カウンターは「Number of Deadlocks / sec」です。

デッドロック通知のより詳細な制御が必要な場合は、これを確認してくださいhttp : //www.sqlservercentral.com/articles/Administration/3243/


あなたが提案したようにアラートをセットアップしようとしましたが、ジョブが実行されるのはステップが定義されている場合のみです。ジョブステップを定義せずにアラートを設定する方法はありますか?
ハサイン

4

SQL2008をお持ちの場合は、@ StanleyJohnsをお勧めします。拡張イベントは診断ツールとして理解する価値があり、JonathonのAn XEvent a Dayシリーズは開始するのに最適な場所です。

デッドロックの代わりに、トレースフラグ1204および1222有効にして、デッドロック情報をSQLエラーログにダンプすることができます。両方を有効にして、2つの異なる形式で情報を取得します。これにより、複雑なデッドロックチェーンを理解しやすくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.