SQL Server Profiler を使用したトレースの表示と分析
トレースにキャプチャされたイベント データを表示するには、SQL Server Profiler を使用します。SQL Server Profiler では、定義されたトレース プロパティに基づいてデータが表示されます。SQL Server のデータを分析するには、SQL Server やデータベース エンジン チューニング アドバイザなどの別のプログラムにデータをコピーする方法があります。データベース エンジン チューニング アドバイザは、Text データ列がトレースに含まれている場合、SQL バッチおよびリモート プロシージャ コール (RPC) のイベントを含んだトレース ファイルを使用できます。詳細については、「物理データベース デザインのチューニング」を参照してください。データベース エンジン チューニング アドバイザで使用する適切なイベントと列がキャプチャされるようにするには、SQL Server Profiler に付属の定義済みチューニング テンプレートを使用します。
SQL Server Profiler を使用してトレースを開くとき、そのトレース ファイルが SQL Server Profiler または SQL トレース システムのストアド プロシージャによって作成されている場合は、トレース ファイルに .trc というファイル拡張子が付いている必要はありません。
注意 |
---|
SQL Server Profiler は、SQL トレース ファイル (.log) と汎用 SQL スクリプト ファイルも読み取ることができます。ファイル拡張子 .log がない SQL トレース ファイル、たとえば trace.txt を開く場合は、ファイル形式として SQLTrace_Log を指定します。 |
SQL Server Profiler の日付および時刻の表示形式は、トレース分析を行いやすいように設定できます。
データのトラブルシューティング
SQL Server Profiler を使用すると、トレースまたはトレース ファイルを Duration、CPU、Reads、または Writes の各データ列でグループ化することにより、データをトラブルシューティングできます。トラブルシューティングできるデータの例としては、実行時間のかかるクエリや、論理読み取り操作の数が例外的に多いクエリなどがあります。
さらに、トレースをテーブルに保存し、Transact-SQL を使用してイベント データを照会することにより、追加の情報を検索できます。たとえば、どの SQL:BatchCompleted イベントの待機時間が長すぎるかを調べるには、次のように実行します。
SELECT TextData, Duration, CPU
FROM trace_table_name
WHERE EventClass = 12 -- SQL:BatchCompleted events
AND CPU < (Duration * 1000)
注意 |
---|
SQL Server 2005 以降では、サーバーはマイクロ秒 (100 万分の 1 (10-6) 秒) 単位でのイベント期間、およびイベントにより使用されるミリ秒 (1000 分の 1 (10-3) 秒) 単位での CPU 時間をレポートします。SQL Server 2000 では、期間および CPU 時間の両方をミリ秒単位でレポートします。SQL Server 2005 以降では、SQL Server Profiler のグラフィカル ユーザー インターフェイスに、既定ではミリ秒単位で Duration 列が表示されますが、トレースがファイルまたはデータベース テーブルに保存されると、Duration 列の値はマイクロ秒単位で記述されます。 |
トレースを確認するときのオブジェクト名の表示
オブジェクトの識別子 (Object ID) でなく名前を表示するには、Object Name データ列に加えて Server Name と Database ID の各データ列もキャプチャする必要があります。
Object ID データ列でグループ化する場合は、まず Server Name と Database ID の各データ列でグループ化してから、Object ID データ列でグループ化してください。同様に、Index ID データ列でグループ化する場合は、まず Server Name、Database ID、および Object ID の各データ列でグループ化してから、Index ID データ列でグループ化してください。サーバーとデータベース (およびインデックス ID の場合はオブジェクト) の間ではオブジェクト ID とインデックス ID は一意でないので、この順序でグループ化する必要があります。
トレース内での特定のイベントの検索
トレース内のイベントを検索およびグループ化するには、次の手順を実行します。
トレースを作成します。
トレースを定義する場合、キャプチャするその他のデータ列に加え、Event Class、ClientProcessID、Start Time の各データ列もキャプチャします。詳細については、「トレースを作成する方法 (SQL Server Profiler)」を参照してください。
Event Class データ列でキャプチャされたデータをグループ化し、トレースをファイルまたはテーブルにキャプチャします。キャプチャされたデータをグループ化するには、[トレースのプロパティ] ダイアログ ボックスの [イベントの選択] タブで [列の構成] をクリックします。詳細については、「トレースに表示される列を構成する方法 (SQL Server Profiler)」を参照してください。
トレースを開始して、適切な時間が経過するか、適切な数のイベントがキャプチャされたら、トレースを停止します。
対象のイベントを検索します。
トレース ファイルまたはテーブルを開き、必要なイベント クラスのノード、たとえば Deadlock Chain を展開します。詳細については、「トレース ファイルを開く方法 (SQL Server Profiler)」または「トレース テーブルを開く方法 (SQL Server Profiler)」を参照してください。
目的のイベントが見つかるまで、トレース データ全体を検索します。SQL Server Profiler の [編集] メニューの [検索] を使用すると、トレース内の値を検索するときに便利です。トレースするイベントの ClientProcessID および Start Time データ列の値を書き留めておきます。
コンテキスト内でイベントを表示します。
トレースのプロパティを表示し、Event Class データ列ではなく ClientProcessID データ列でグループ化します。
表示する各クライアント プロセス ID のノードを展開します。トレース全体を手動で検索するか、または前の対象イベントの Start Time 値が見つかるまで [検索] オプションを使用します。選択した各クライアント プロセス ID に所属するその他のイベントと共に、イベントは発生順に表示されます。たとえば、トレース内にキャプチャされた Deadlock および Deadlock Chain イベントは、展開されたクライアント プロセス ID 内の SQL:BatchStarting イベントの直後に表示されます。
これと同じ方法で、グループ化されたイベントを見つけることができます。目的のイベントが見つかったら、ClientProcessID、ApplicationName、その他のイベント クラスでイベントをグループ化すると、関連する動作を発生順に表示できます。