ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL ServerでSQLの実行履歴を確認する方法

今回は、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文は公式サイトのページを参考に作成しました(本記事の下部にリンクを張り付けています)。

また、上記で取得できる情報はキャッシュから取得しているため、時間が経過すると過去の情報は取得できないようです。
キャッシュは、メモリ容量が少なくなると削除されるらしい?がそこらへんは勉強不足でよくわかっておりません・・・