SQL Serverで処理時間を計測する


SQL Serverでパフォーマンスを計測したかったので調査してまとめました.

処理時間を計測する

処理を開始する前にシステム日時を取得し,処理完了後に開始日時とシステム日時の差を取得します.
DATEDIFFの引数を変えれば単位を変えることができます(例ではms).

DECLARE @STARTDATETIME datetime2 = SYSDATETIME()

-- ここに計測したいSQLを書く

SELECT DATEDIFF(MILLISECOND, @STARTDATETIME, SYSDATETIME()) AS PROCESSING_TIME_MS

キャッシュを消す

SQL Serverはデータバッファのキャッシュやクエリプランのキャッシュを再利用する賢いヤツなので純粋な処理時間を計測したい場合はキャッシュを消します.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

処理を待機する

念のためキャッシュを消した後数秒待機させます.

WAITFOR DELAY '00:00:10'

まとめ

以上をまとめると処理時間を計測することができます.

-- キャッシュを消す
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
GO

-- キャッシュ消去後数秒待機する
WAITFOR DELAY '00:00:10'

-- 開始日時を取得する
DECLARE @STARTDATETIME datetime2 = SYSDATETIME()

-- ここに計測したいSQLを書く

-- 終了日時と開始日時の差から処理時間を取得する
SELECT DATEDIFF(MILLISECOND, @STARTDATETIME, SYSDATETIME()) AS PROCESSING_TIME_MS