-
SQL Server Profiler(SSMSのツールメニュー)を使用して、これらのイベントをログに記録するトレースを作成します。
RPC:Completed SP:Completed SP:StmtCompleted SQL:BatchCompleted SQL:StmtCompleted
-
標準のトレーステンプレートから始めて、それを整理することができます。これが特定のデータベース用かサーバー全体用かを指定しませんでした。特定のDb用の場合は、DatabaseID列を含め、DBにフィルターを設定します(
SELECT DB_ID('dbname')
)。各イベントに論理読み取りデータ列が含まれていることを確認してください。ファイルにログを記録するようにトレースを設定します。このトレースをバックグラウンドで無人で実行するために残しておく場合、十分なスペースがある場合は、トレースファイルの最大サイズを500MBまたは1GBに設定することをお勧めします(サーバーでのアクティビティの量によって異なります)。あなたはそれを吸って見る必要があります。 -
トレースを簡単に開始してから一時停止します。 [ファイル]->[エクスポート]->[スクリプトトレース定義]に移動し、DBバージョンを選択して、ファイルに保存します。これで、プロファイラーGUIを介して実行するよりもはるかに少ないオーバーヘッドでトレースを作成するSQLスクリプトができました。このスクリプトを実行すると、トレースID(通常は
@ID=2
)が出力されます。 );これを書き留めてください。 -
トレースファイル(.trc)を取得したら(最大ファイルサイズに達したためにトレースが完了したか、
を使用して実行中のトレースを停止しましたEXEC sp_trace_setstatus @ ID、0
EXEC sp_trace_setstatus @ ID、2
トレースをプロファイラーにロードするか、ClearTrace(非常に便利)を使用するか、次のようにテーブルにロードできます。
SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)
次に、クエリを実行して、次のようなデータを集約できます。
SELECT COUNT(*) AS TotalExecutions,
EventClass, CAST(TextData as nvarchar(2000))
,SUM(Duration) AS DurationTotal
,SUM(CPU) AS CPUTotal
,SUM(Reads) AS ReadsTotal
,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC
コストのかかるクエリを特定したら、実際の実行計画を生成して調べることができます。