SQL Server 2008は実行計画の作成日を保存しますか?


13

最近、使用するアプリケーションをアップグレードしました。これには、データベースのスキーマの変更が含まれていました。これらの変更により、キャッシュされた実行計画が強制的に破棄される可能性がありました。SQL Serverが多数の新しいプランを作成することを余儀なくされた場合、これによりユーザーエクスペリエンスが低下する可能性がありました。これが事実かどうかを知りたい。

それで、私の質問は、SQL Server 2008はキャッシュされた実行プランの作成日を保存するのですか?管理ビューにsys.dm_exec_cached_plansは日付フィールドがないため、そうではないと思われます。

回答:


12

それはに保存されておらずsys.dm_exec_cached_plans、私が見つけることができる計画XMLのどこにも埋もれていません。ただし、他のDMVには有用な情報があります。

ストアドプロシージャの場合、プランがキャッシュされた時間を取得できますsys.dm_exec_procedure_stats

SELECT TOP(250) 
    p.name AS [SP Name]
    , ps.execution_count
    , ps.cached_time
FROM 
    sys.procedures p WITH (NOLOCK)
INNER JOIN 
    sys.dm_exec_procedure_stats ps WITH (NOLOCK)
ON  p.[object_id] = ps.[object_id]
WHERE 
    ps.database_id = DB_ID()
ORDER BY 
    ps.cached_time DESC 
OPTION 
    (RECOMPILE);

アドホッククエリの場合、作成時間はsys.dm_exec_query_stats次のとおりです。

SELECT TOP(250) 
    st.[text] AS [QueryText]
    , qs.execution_count
    , qs.creation_time
FROM 
    sys.dm_exec_cached_plans cp WITH (NOLOCK)
INNER JOIN
    sys.dm_exec_query_stats qs WITH (NOLOCK)
ON  qs.plan_handle = cp.plan_handle
CROSS APPLY 
    sys.dm_exec_sql_text(cp.plan_handle) st
WHERE 
    cp.objtype = N'Adhoc' 
ORDER BY 
    qs.creation_time DESC 
OPTION 
    (RECOMPILE);

@SqlKiwi ...によると、creation_timeからcached_timeへの変更は、2008年にプロシージャとトリガーが追加され、よりわかりやすい名前を選択する機会を得たためです。作成/キャッシュされた時間は、元の計画の作成時間ではなく、最後のコンパイルを反映しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.