次の方法で共有


SQL Server Profiler を使用してトレースを表示および分析する

適用対象:SQL ServerAzure SQL Managed Instance

トレースにキャプチャされたイベント データを表示するには、 SQL Server プロファイラー を使用します。 SQL Server プロファイラー では、定義されたトレース プロパティに基づいてデータが表示されます。 SQL Server のデータを分析するには、 SQL Server や データベース エンジン チューニング アドバイザーなどの別のプログラムにデータをコピーする方法があります。 データベース エンジン チューニング アドバイザーは、 Text データ列がトレースに含まれている場合、SQL バッチおよびリモート プロシージャ コール (RPC) のイベントを含んだトレース ファイルを使用できます。 データベース エンジン チューニング アドバイザーでの使用を目的に正しいイベントと列がキャプチャされるようにするには、SQL Server プロファイラーに付属している定義済みのチューニング テンプレートを使用します。

SQL Server Profiler を使用してトレースを開く場合、ファイルが SQL Server Profiler または SQL トレース システム ストアド プロシージャによって作成された場合、トレース ファイルに .trc ファイル拡張子を付ける必要はありません。

SQL Server Profiler では、SQL トレース .log ファイルと汎用 SQL スクリプト ファイルを読み取ることもできます。 .logなどの.logファイル拡張子を持たない SQL Trace trace.txt ファイルを開く場合は、SQLTrace_Logをファイル形式として指定します。

SQL Server プロファイラー の日付および時刻の表示形式は、トレース分析を行いやすいように設定できます。

データのトラブルシューティング

SQL Server プロファイラーを使用すると、トレースまたはトレース ファイルを DurationCPUReads、または Writes の各データ列でグループ化することにより、データをトラブルシューティングできます。 トラブルシューティングできるデータの例としては、実行時間のかかるクエリや、論理読み取り操作の数が例外的に多いクエリなどがあります。

トレースをテーブルに保存し、Transact-SQL を使用してイベント データをクエリすると、追加の情報を検索できます。 たとえば、どの SQL:BatchCompleted イベントの待機時間が長すぎるかを調べるには、次のように実行します。

SELECT TextData,
       Duration,
       CPU
FROM trace_table_name
WHERE EventClass = 12
-- SQL:BatchCompleted events
      AND CPU < (Duration * 1000);

サーバーはマイクロ秒 (10^-6 秒) 単位でのイベント期間、およびイベントにより使用されるミリ秒 (10^-3 秒) 単位での CPU 時間をレポートします。 SQL Server プロファイラー のグラフィカル ユーザー インターフェイスに、既定ではミリ秒単位で Duration 列が表示されますが、トレースがファイルまたはデータベース テーブルに保存されると、 Duration 列の値はマイクロ秒単位で記述されます。 これらの測定値は、Transact-SQL (T-SQL) クエリ用です。

トレースを表示するときにオブジェクト名を表示する

オブジェクトの識別子 (Object ID) でなく名前を表示するには、 Object Name データ列に加えて Server NameDatabase ID の各データ列もキャプチャする必要があります。

Object ID データ列でグループ化する場合は、まず Server NameDatabase ID の各データ列でグループ化してから、 Object ID データ列でグループ化してください。 同様に、 Index ID データ列でグループ化する場合は、まず Server NameDatabase ID、および Object ID の各データ列でグループ化してから、 Index ID データ列でグループ化してください。 オブジェクト ID とインデックス ID はサーバーとデータベース (およびインデックス ID のオブジェクト間) で一意ではないので、この順序でグループ化する必要があります。

トレース内の特定のイベントを検索する

トレース内のイベントを検索およびグループ化するには、次の手順を実行します。

  1. トレースを作成します。

    • トレースを定義する場合、キャプチャするその他のデータ列に加え、 Event ClassClientProcessIDStart Time の各データ列もキャプチャします。 詳細については、「 トレースの作成 (SQL Server Profiler)」を参照してください。

    • キャプチャしたデータを イベント クラス のデータ列でグループ化し、トレースをファイルまたはテーブルにキャプチャします。 キャプチャしたデータをグループ化するには、[トレースのプロパティ] ダイアログ ボックスの [イベントの選択] タブで [列の整理] を選択します。 詳細については、「 トレースに表示される列の整理 (SQL Server Profiler)」を参照してください。

    • トレースを開始して、適切な時間が経過するか、適切な数のイベントがキャプチャされたら、トレースを停止します。

  2. 対象のイベントを検索します。

    • トレース ファイルまたはテーブルを開き、必要なイベント クラスのノード、たとえば Deadlock Chainを展開します。 詳細については、「 トレース ファイルを開く (SQL Server Profiler) 」または「 トレース テーブルを開く (SQL Server Profiler)」を参照してください。

    • 探しているイベントが見つかるまでトレース データを検索します (トレース内の値を検索するには、SQL Server Profiler の [編集] メニューの [検索] コマンドを使用します)。 トレースするイベントの ClientProcessID データ列に加えて Start Time データ列の値を書き留めておきます。

  3. コンテキスト内でイベントを表示します。

    • トレース プロパティを表示し、イベント クラスのデータ列ではなく ClientProcessID データ列でグループ化します。

    • 表示する各クライアント プロセス ID のノードを展開します。 トレースを手動で検索するか、ターゲット イベントの前に書き込まれた開始時刻の値が見つかるまで Find を使用します。 選択した各クライアント プロセス ID に属するその他のイベントと共に、イベントは発生順に表示されます。 たとえば、トレース内でキャプチャされた Deadlock イベントと Deadlock Chain イベントは、展開されたクライアント プロセス ID 内の SQL:BatchStarting イベントの直後に表示されます。

これと同じ方法で、グループ化されたイベントを見つけることができます。 目的のイベントが見つかったら、 ClientProcessIDApplicationName、その他のイベント クラスでイベントをグループ化すると、関連する動作を発生順に表示できます。