this like この質問への回答を探しているときに、 this post などの簡単な参照リンクを見つけました。
実行時間> some_thresholdである実行時間を含むSQLクエリのリストを生成するための、できるだけ簡潔なプロシージャを探しています。
答えは簡単だったので、ここにはなかったと思います。これが私が理解したことです:
File -> New Trace...
RPC:Completed
SQL:BatchCompleted
多数のアプリケーションを実行していて、ノイズを削減したい場合は、ApplicationName
、NTUserName
などでフィルタリングできます。一部の列のみを表示することもできます。 TextData
とDuration
だけです。
これがプロファイラの はるかに高度な処理 です。
特にトレースをデータベースにインポートする場合、プロファイラートレースを使用することは優れた方法です。
SQL Server 2005以降を使用している場合、DMV(動的管理ビュー)は代替方法を提供します。
SELECT TOP 100
(total_logical_reads + total_logical_writes) / qs.execution_count AS average_IO,
(total_logical_reads + total_logical_writes) AS total_IO,
qs.execution_count AS execution_count,
SUBSTRING (qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) AS indivudual_query,
o.name AS object_name,
DB_NAME(qt.dbid) AS database_name
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
LEFT OUTER JOIN sys.objects o ON qt.objectid = o.object_id
where qt.dbid = DB_ID()
ORDER BY average_IO DESC;
覚えておくべきことの1つは、SQL Serverの起動時にDMVがクリアされることです。そのため、サーバーが12分間稼働していると、多くのことはわかりません。また、これらは累積的であるため、メンテナンスウィンドウ(checkDB)がデータを歪める可能性があります。