SQL Server を使用しています。一連のクエリを実行するストアド プロシージャを作成しています。すべてのクエリの実行時間をログに記録したい。出来ますか?助けてください。
4 に答える
ロギングテーブルの使用例:
プロシージャprocedure_name
を
begindeclare
@start_date datetime = getdate()、
@execution_time_in_seconds int
/*プロシージャコードここに作成*/
@execution_time_in_seconds = datediff(SECOND、@ start_date、getdate())
logging_table(execution_time_column)値(@execution_time_in_seconds)に挿入)
終了
エンジンはすでに で実行の統計を保持していsys.dm_exec_query_stats
ます。手順内のログ テーブルへの挿入などの大量のログを追加する前に、これらの統計から何を抽出できるかを検討してください。次の値が含まれます。
- 実行回数
- 実行時間(経過)
- 作業時間 (並列クエリのすべての CPU でブロックされていない実際の CPU 時間)
- 論理読み取り/書き込み
- 物理読み取り
- 返される行数
この種の情報は、素朴なアプローチで記録するものよりもはるかに豊富で、パフォーマンスの調査に役立ちます。ほとんどのメトリクスには、最小値、最大値、および合計値が含まれています (実行回数には平均値もあります)。コストのかかるクエリ (経過平均が大きいクエリ)、頻繁にブロックされるクエリ (経過時間が作業時間よりもはるかに長いクエリ)、大量の書き込みまたは大量の読み取りが発生するクエリ、大量の結果を返すクエリなどについて、すぐに手がかりを得ることができます。 .
You can keep track of the time stamp via CURRENT_TIMESTAMP
and log it before and after the statements you want to execute and then log them and later compare them to see and of course with meaningful messages indicating what started and finished when. Or if you want to see it also you could use this: SET STATISTICS TIME ON
and SET STATISTICS TIME OFF
this one I use in query analyser.
Depending on what you exactly want you need to figure out where to store these messages for logging. Like a table or some thing else.
PRINT&GETDATEを使用して、実行時間情報をログに記録します
例:
DECLARE @Time1 DATETIME
DECLARE @Time2 DATETIME
DECLARE @Time3 DATETIME
DECLARE @STR_TIME1 VARCHAR(255)
DECLARE @STR_TIME2 VARCHAR(255)
DECLARE @STR_TIME3 VARCHAR(255)
--{ execute query 1 }
SET @Time3 = GETDATE()
--{ execute query 2 }
SET @Time2 = GETDATE()
--{ execute query 3 }
SET @Time3 = GETDATE()
SET @STR_TIME1 = CONVERT(varchar(255),@Time1,109)
SET @STR_TIME2 = CONVERT(varchar(255),@Time2,109)
SET @STR_TIME3 = CONVERT(varchar(255),@Time3,109)
PRINT 'T1 is' + @STR_TIME1
PRINT 'T2 is ' + @STR_TIME2
PRINT 'T3 is ' + @STR_TIME3