SQL Server Profiler を使用したトレースの表示と分析

適用対象: SQL ServerAzure SQL Managed Instance

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

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

Note

SQL Server プロファイラー は、SQL トレース .log ファイルと汎用 SQL スクリプト ファイルも読み取ることができます。 ファイル拡張子 .log がない SQL トレース ファイル、たとえば 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)  

Note

サーバーはマイクロ秒 (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)」を参照してください。

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

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

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

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

    • 目的のイベントが見つかるまで、トレース データ全体を検索します。 [編集] メニューの [検索] SQL Server プロファイラー を使用すると、トレース内の値を検索するときに便利です。 トレースするイベントの ClientProcessID データ列に加えて Start Time データ列の値を書き留めておきます。

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

    • トレースのプロパティを表示し、 ClientProcessIDClientProcessID Event Class の各データ列もキャプチャする必要があります。

    • 表示する各クライアント プロセス ID のノードを展開します。 トレース全体を手動で検索するか、または前の対象イベントの Start Time 値が見つかるまで [検索] オプションを使用します。 選択した各クライアント プロセス ID に属するその他のイベントと共に、イベントは発生順に表示されます。 たとえば、トレース内にキャプチャされた Deadlock データ列に加えて Deadlock Chainイベントは、展開されたクライアント プロセス ID 内の SQL:BatchStartingevents within the expデータ列に加えてed client process ID.

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

参照