セージ の メモ書き

メモこそ命の恩人だ

SQL Server - プランキャッシュ(プロシージャキャッシュ)

プランキャッシュ(プロシージャキャッシュ)

  • 実行プランのキャッシュ。
  • キャッシュにあれば、クエリのコンパイル処理が不要になる。

キャッシュの削除

DBCC FREEPROCCACHE;

キャッシュ済み実行プランの確認

sys.dm_exec_sql_text

sys.dm_exec_sql_text (Transact-SQL) - SQL Server | Microsoft Learn

  • 実行プランのクエリを文字列で確認できる。
  • plan_handle が必要。
    • 後述のビューと組合わせて使用する。
    • 単体では使用しない。

sys.dm_exec_cached_plans

sys.dm_exec_cached_plans (Transact-SQL) - SQL Server | Microsoft Learn

  • 項目例(抜粋)
    • オブジェクトの種類(T-SQL,、トリガー、制約 etc.)
    • 実行プランの使用回数
    • 実行プランのサイズ

実行プランの使用回数が多い順に表示してみる。

SELECT usecounts, text
FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle)   
ORDER BY usecounts DESC;

sys.dm_exec_query_stats

sys.dm_exec_query_stats (Transact-SQL) - SQL Server | Microsoft Learn

  • 集計パフォーマンス統計を表示できる。
  • sys.dm_exec_cached_plans よりも性能評価の解析に使えそう。。。
  • 項目例(抜粋)
    • 実行プランの生成日時
    • 実行プランの使用回数
    • 実行プラン使用時のCPU時間
    • 実行プラン使用時の物理読取数(IOのページ)
    • 実行プラン使用時の論理読取数(メモリのページ)
    • 実行プランにより返却された行数
    • 並列処理数

とりあえず... 全項目を表示してみる。

SELECT text, *
FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_sql_text(plan_handle);

CPU時間の多い順に表示してみる。

SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time], text   
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
ORDER BY total_worker_time/execution_count DESC;  



以上