SQLプロファイラを使用せずにトレースを行う

SQL Server で、SQLプロファイラを使用せずにトレースログを取得する方法をご紹介します。

SQLプロファイルツールを使用すると簡単にトレースが行えるため、突発的な調査等で安易に利用しがちですが、大量のトランザクションを処理するサーバでは、致命的な性能問題となることがあります。

プロファイラを稼働させている状態で、下記の現象が発生した場合は、プロファイラ自体が原因である可能性が高いです。

問題の現象
・クエリが異常に遅くなる(通常1秒程度のクエリが数十秒など)
・クエリタイムアウトとなる
・SQL Serverプロセスの使用メモリが極端に少なくなる
・サーバの使用可能メモリが極端に少なくなる

本現象の原因
・SQLプロファイラが大量のトランザクションをトレースする際に、大量のシステムキャッシュを使用する
・メモリ上のシステムキャッシュがSQL Serverプロセスのメモリ領域を圧迫する。
(最終的にはSQL Serverが数十MB以下の物理メモリ上で動作せざるを得なくなり、異常なレスポンス低下となる。)

SQLプロファイラによるトレースを停止してもシステムキャッシュは解放されません。
SQLプロファイラのウィンドウを閉じる必要があります。

このような状態を避けるためにも、SQLプロファイラを使用せずにトレースを行いましょう。
以下にトレースの定義・開始と停止するためのサンプルスクリプトを作成しました。

StartTrace.txt (897.00 bytes)
StopTrace.txt (281.00 bytes)

取得するイベントや列は、個別に定義しなければいけません。
GUIと同じようにテンプレートが利用できるといいのですが、できないようです。

トレースイベントと列については、以下の参照してください。

http://msdn.microsoft.com/ja-jp/library/ms186265.aspx


This entry was posted in 未分類 and tagged , . Bookmark the permalink.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>