SQL プロファイラーを使用して、LocalDB インスタンスに要求されているクエリを観察することはできますか?
5 に答える
これは私が SQL Server Express 2012 で使用したものです (注: "LocalDB* ではありません。LocalDB を使用したことがないため、"通常の" SQL Server Express とは異なる可能性があります)。
ステップ 1: トレースをセットアップする
これは基本的に「ハードワーク」です。最初に、SQL Server の既定のログ ディレクトリがどこにあるかを確認する必要があります。トレース ファイルを指定するには、このディレクトリ名が必要です。
次に、次のようにしてトレースを作成します。
DECLARE @TraceID int
DECLARE @tracefile nvarchar(255)
DECLARE @endDate datetime
DECLARE @size bigint
-- no file extension!
SET @tracefile = 'C:\Data\sqlserver\MSSQL11.SQLEXPRESS\MSSQL\Log\mydb_trace'
-- tracing stops when either the max size of the file is reached
-- or the enddate (whichever occurs first)
-- size is in MB
SET @size = 250
SET @enddate = DateAdd(DAY, 15, GetDate())
EXEC @rc = sp_trace_create @TraceID output, 2, @tracefile, @size, @enddate
トレースする必要があるすべてのイベントに対して、sp_trace_setevent
複数回呼び出して、そのイベントのどの列を返す必要があるかを定義する必要があります。
イベントと列の完全なリストについては、http: //msdn.microsoft.com/en-US/library/ms186265%28v=sql.90%29.aspxを参照してください。
-- Enable Event: 45 = SP:StmtCompleted
EXEC sp_trace_setevent @TraceID, 45, 27, @on -- 27: EventClass
EXEC sp_trace_setevent @TraceID, 45, 12, @on -- 12: SPID
EXEC sp_trace_setevent @TraceID, 45, 35, @on -- 35: DatabaseName
EXEC sp_trace_setevent @TraceID, 45, 11, @on -- 11: SQLSecurityLoginName
EXEC sp_trace_setevent @TraceID, 45, 6, @on -- 6: NTUserName
EXEC sp_trace_setevent @TraceID, 45, 8, @on -- 8: ClientHostName
EXEC sp_trace_setevent @TraceID, 45, 10, @on -- 10: ApplicationName
EXEC sp_trace_setevent @TraceID, 45, 1, @on -- 1: TextData
EXEC sp_trace_setevent @TraceID, 45, 13, @on -- 13: Duration
EXEC sp_trace_setevent @TraceID, 45, 14, @on -- 14: StartTime
EXEC sp_trace_setevent @TraceID, 45, 15, @on -- 15: EndTime
EXEC sp_trace_setevent @TraceID, 45, 18, @on -- 18: CPU
EXEC sp_trace_setevent @TraceID, 45, 29, @on -- 29: Nesting Level
上記の呼び出しはすべて、トレースするすべてのイベントに対して実行する必要があります。
12 = SQL:BatchCompleted
、42 = SP:Starting
、43 = SP:Completed
、45 = SP:StmtCompleted
、50 = SQL Transaction
最も興味深いイベントを見つけました。
必要に応じてフィルターを設定できます。私は通常、システム イベントを除外し、特定のデータベースのイベントのみを表示します。
-- Exclude system events (so only user events are shown)
-- 60: IsSystem Column
-- 0: logical Operator: AND (only)
-- 1: comparison operator: not equal
-- 1: value
EXEC sp_trace_setfilter @TraceID, 60, 0, 1, 1
-- only mydb database
EXEC sp_trace_setfilter @TraceID, 35, 0, 6, N'mydb'
トレースをセットアップしたら、アクティブ化する必要があります。
EXEC sp_trace_setstatus @TraceID, 1
(変数の使用法のため、上記は単一のバッチとして実行する必要があることに注意してください)。
トレースがどのように定義されたかを確認するには、次のステートメントを使用できます。
select traceid,
case property
when 1 then 'Trace Options'
when 2 then 'Trace file'
when 3 then 'Max. file size'
when 4 then 'Stop time'
when 5 then 'Status'
end as property_name,
case
when property = 5 then
case convert(nvarchar(max), value)
when '1' then 'Active'
else 'Inactive'
end
else convert(nvarchar(max), value)
end as value
from ::fn_trace_getinfo(null)
where property in (2,3,5)
次に、アプリケーションを実行するか、トレースするデータベースに対してステートメントを発行します。
ステップ 2: トレース情報を取得する
このためには、実際のトレース ファイルへのフル パスを知る必要があります (ステップ 1 から)。ファイル拡張子を含めfn_trace_gettable
てファイルを指定する必要があることに注意してください。
SELECT ApplicationName,
LoginName,
HostName,
SPID,
Duration,
StartTime,
EndTime,
DatabaseName,
reads,
writes,
RowCounts,
cpu,
EventClass,
case EventClass
when 10 then 'RPC:Completed'
when 11 then 'RPC:Starting'
when 12 then 'SQL:BatchCompleted'
when 13 then 'SQL:BatchStarting'
when 40 then 'SQL:StmtStarting'
when 41 then 'SQL:StmtCompleted'
when 42 then 'SP:Starting'
when 43 then 'SP:Completed'
when 44 then 'SP:StmtStarting'
when 45 then 'SP:StmtCompleted'
when 50 then 'SQL Transaction'
when 67 then 'Execution Warnings'
when 71 then 'Prepare SQL'
when 72 then 'Exec Prepared SQL'
when 73 then 'Unprepare SQL'
end as Event,
LineNumber,
TextData
FROM ::fn_trace_gettable('C:\Data\sqlserver\MSSQL11.SQLEXPRESS\MSSQL\Log\mydb_trace.log', default)
order by StartTime;
上記を調整して、関心のある情報を返します。
必要な情報を取得したら、トレースをオフにする必要があります。
ステップ 3: トレースを無効にする
このためには、Trace-ID を知る必要があります (たとえば、手順 1 の "info ステートメントを実行することによって)。この ID を使用して、最初にトレースを停止する必要があります。その後、トレースを削除できます。
-- stop the trace
EXEC sp_trace_setstatus @TraceID, 0
-- delete the trace
EXEC sp_trace_setstatus @TraceID, 2
http://expressprofiler.codeplex.com/から
ExpressProfiler (別名 SqlExpress Profiler) はシンプルですが、基本的な GUI を備えた SQL Server Profiler の十分な代替品です。
要件もインストールもありません。
SQL Server 2005/2008/2008r2/2012 (LocalDB を含む) の Express および非 Express エディションの両方で使用可能
サーバーを (LocalDB)\v11.0 に設定するのと同じくらい簡単です