待機の原因となっているクエリを見つける


34

特定の種類の待機がある場合、本番SQL 2008 R2サーバーでどのクエリがそれらの待機を安全に引き起こしているのかをどのようにして見つけるのですか?

この特定のケースでは、私は疑問に思っていasync_network_ioます。

回答:


32

これらをチェックする私のお気に入りの方法は、Adam Machanicの優れたsp_WhoIsActiveストアドプロシージャを使用することです。これを使用する方法に関するビデオと、コードをダウンロードするためのリンクを次に示します。

http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/

問題は、結果を確認するために定期的に実行する必要があることです。このデータを定期的に収集する場合は、sp_WhoIsActiveの結果をテーブルにキャプチャすることに関するKendra Littleのチュートリアルを参照してください。

http://www.littlekendra.com/2011/02/01/whoisactive/

最後に、クエリがasync_network_ioを待つたびに何かを起動したい場合は、拡張イベントと呼ばれる新しいツールを使用できます。これは、魔法を起こすことができるSQL Serverエンジン内のデバッグポイントのようなものです。率直に言って、2008年に使用するのは少し苦痛です。


14

「async_wait_io」は待機タイプではありません。可能なASYNC%待機タイプは次のとおりです。

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

待機タイプのいくつかの良いリンク:

現在の待機を見つけるためのクエリへの私の行く:

SELECT  req.session_id
       ,blocking_session_id
       ,ses.host_name
       ,DB_NAME(req.database_id) AS DB_NAME
       ,ses.login_name
       ,req.status
       ,req.command
       ,req.start_time
       ,req.cpu_time
       ,req.total_elapsed_time / 1000.0 AS total_elapsed_time
       ,req.command
       ,req.wait_type
       ,sqltext.text
FROM    sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
JOIN    sys.dm_exec_sessions ses
        ON ses.session_id = req.session_id
WHERE req.wait_type IS NOT NULL
--WHERE req.wait_type = '?'

すみません、async_network_ioを意味していました。
カイルブラント

他の非常に良い記事:Brent OとBuck Woodyのwait statsWait statsを失います。彼らは非常に価値があります!
マリアン

@マリアン:ブレントは今日私にいくつかのものを見せていましたが、これに到達する前に時間を使い果たしました、多分その記事は同じように良いでしょう:
カイルブラント

@Kyle、あなたはブレントにあなたのものを見せて、それでも私たちに尋ねますか?:)彼をあなたのオフィスの椅子につないでください。彼の脳を乾かしてください。そして、結果をお知らせください。
マリアン

@マリアン:うん、彼の助けができてとてもラッキー。私はここで答えを得るならば、インターネット上の誰もが同様の回答を得るのに事がある:-)
カイルブラント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.