SQL トレースの最適化

SQL トレースを実行すると、データを収集するためにシステム リソースが使用されるのでパフォーマンス コストが発生しますが、このコストはさまざまな方法で最小限に抑えることができます。トレースによって発生するパフォーマンス コストを最小限に抑えるには、次のようにしてください。

  • トレースの実行には、コマンド プロンプトを使用することを検討してください。グラフィカル ユーザー インターフェイスを使用すると、パフォーマンスが低下します。詳細については、「sp_trace_create (Transact-SQL)」を参照してください。

  • 頻繁に発生するイベントは含めないようにします。可能な場合は、特定のイベント クラスやフィルタを使用してトレースの範囲を狭くします。収集するトレース イベントが少ないほど、トレースをサポートするために必要なシステム リソースも少なくて済みます。

  • 関連性のあるデータを提供するイベントだけを収集するようにトレースの焦点を絞ります。たとえば、トレースでデッドロックを特定する場合は、Lock:Acquired イベント クラスではなく Lock:Deadlock イベント クラスを使用します。これらのイベント クラスを両方含めると、取得したすべてのロックをトレースしなければならないため、実行コストが倍増します。

  • 重複データは収集しないようにします。たとえば、SQL:BatchStartedSQL:BatchCompleted を収集する場合は、SQL:BatchStarted イベント クラスのテキスト データだけを収集することにより、結果セットのサイズを最小限に抑えることができます。

  • トレース定義でフィルタを使用します。たとえば、アドホック クエリの際のパフォーマンスの低下を報告しているユーザーがいる場合は、LoginName に対するフィルタを作成します。LoginName がこのユーザー名と一致するイベントだけを含めるように、フィルタを設定します。

パフォーマンスに重大な影響を与えるイベントのトレースを実行する必要がある場合は、次のいずれかの方法に従って、サーバーのパフォーマンスに対する影響を最小限に抑えるようにしてください。

  • トレースの実行時間の短縮。トレースの実行時間の長さは、停止時刻を有効にすることによって調整できます。これは、イベント クラスの数を制限したり、イベントをフィルタ選択したりすることができない場合に特に重要になります。停止時刻を有効にすると、トレースによって発生するパフォーマンス コストが永続しなくなります。

  • トレース結果のサイズの制限。トレース結果のサイズの上限は、ファイルの最大サイズに設定できます。この方法を採用すると、ファイル サイズの上限に達した時点でパフォーマンス コストが発生しなくなります (ファイル ロールオーバーが有効になっていない場合)。

  • 返されるイベントの数の制限。SQL Server Profilerを使用すると、トレースをテーブルに保存し、行の最大数を設定することにより、返されるイベントの数を制限することができます。最大行数に達した後も、SQL Server Profiler の画面にはトレース結果が引き続き表示されますが、結果をテーブルに記録することによるコストは発生しなくなります。