最も多くのネットワークトラフィックを引き起こしているクエリを調べる


23

実稼働SQLサーバーで、データトラフィックの断続的な膨大なスパイクが発生しています。NETWORK IO待機を引き起こしている最大200Mbit / sは、クエリタイムアウトを引き起こします。どのクエリが大きな結果セットを返しているかを調べるにはどうすればよいですか?

回答:


18

これはDMVから見つけることができます。

SELECT session_id, num_writes, st.text AS statement_text
FROM sys.dm_exec_connections AS ec
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS st
ORDER BY num_writes DESC

トレースとは異なり、これは実稼働サーバーで実行しても安全です。


7

SQLプロファイラーを使用して運用データのトレースを取得し、最大の読み取りと書き込みを行うコード/バッチを収集します。トレースをフィルタリングして、読み取り/書き込みが多いプロシージャとバッチのみを取得します。自分の目に合ったサンプルを選択してください。100万件以上の読み取りまたは書き込みがあるとします。

開発/テストマシンへのこれらの呼び出しのサンプルを取得し、オプション「クライアント統計を含める」を有効にして(メニュークエリ-クライアント統計を含める)Management Studioで実行します。次に、クライアント統計情報を含む別のウィンドウが表示されます:クライアントから送信されたバイト数、サーバーから受信されたバイト数。

データをフィルタリングせずに本番DBでのトレースを有効にしないでください!!! 最も可能性のあるもの(db、ホスト名、あなたが信じているもの)をフィルタリングしてから、トレースを開始してください。:-)の後にプロファイラーを閉じることを忘れないでください。

PS:私は別の素晴らしいオプションを思い出しました:一定期間のトレースに沿って、Perfmonを使用してデータも保存する必要があります(IOパラメーターのみを選択)。プロファイラーには、トレースファイルとperfmonデータファイルを一緒にインポートする優れた機能があります。そして、最大のIOスパイクがあるときに、そこを見ることができます。

PS2:Gaiusのオプションがよりエレガントであることに同意します。しかし、後世のためにかさばる答えを残します!:-)


5

まだ見ていない場合は、Adam Machanicのsp_WhoIsActiveを調べてみてください。彼は最近、sp_WhoIsActiveに組み込まれているさまざまな機能を説明する一連のブログ投稿を行いました。そのうちの1つは@delta_intervalです。

これにより、全体で最も多くのCPUまたはI / Oを占有しているものが表示されるだけでなく、現在最も多くのCPUまたはI / Oを占有しているものも表示できます。

この機能の詳細については、次のブログシリーズをご覧ください。

http://whoisactive.com/docs/01_background/

次のブログ投稿では、sp_WhoIsActiveの出力をソートし、表示する列を選択する方法について説明しています。

http://whoisactive.com/docs/24_output/

これは、彼がセットアップした以下の更新リンクで利用できる多くの投稿の1つです。

http://whoisactive.com

バージョン11.0はこの回答の時点で利用可能です。したがって、古いバージョンを使用している場合は、アップグレードする必要があるかもしれません:D

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