今回は、SQL Serverで実行したSQLの実行履歴を確認する方法についてメモ程度に残しておきます。
この記事で紹介する方法は、DMV(動的管理ビュー)より確認する方法になります。
DMV(動的管理ビュー)でSQL実行履歴を確認する
SQLの実行履歴を確認するステートメントは以下の通りです。
qs.last_execution_timeで、SQLの実行時間を条件にするとある程度絞り込めると思います。
SELECT SUBSTRING( st.text ,(qs.statement_start_offset / 2) + 1 ,((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) + 1 ) AS statement_text ,qs.last_execution_time FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st WHERE qs.last_execution_time >= '2021-08-31' ORDER BY qs.last_execution_time DESC ;
カラム「statement_text」は少々複雑です。sys.dm_exec_sql_textのtextカラムからSQLのテキストが取得できるのですが、このカラムはバッチ単位でSQLのテキストが登録されているため、バッチ単位ではなくステートメント単位で取得するために、色々とやっているようです。
正直、そこらへんはよくわからなかったので、上記SQL文は公式サイトのページを参考に作成しました(本記事の下部にリンクを張り付けています)。
また、上記で取得できる情報はキャッシュから取得しているため、時間が経過すると過去の情報は取得できないようです。
キャッシュは、メモリ容量が少なくなると削除されるらしい?がそこらへんは勉強不足でよくわかっておりません・・・