sp_executesql
およびストアドプロシージャは、t-sqlから生成されたプランを強制的にキャッシュに入れますが、この動作はテーブル値関数と共有されますか?
この動作はテーブル値関数と共有されますか?
短い答えは次のとおりです。チェックすると キャッシュにある実行プラン なので、これらはそこにあるオブジェクトです。
cacheobjtype nvarchar(34)キャッシュ内のオブジェクトのタイプ。値は次のいずれかです。
コンパイルされたプラン
コンパイルされたプランスタブ
パースツリー
拡張プロシージャ
CLRコンパイル済み関数
CLRコンパイル済みプロシージャ
次のことを検討している可能性があります。
プランキャッシュの構成を確認します。
SELECT objtype AS [CacheType],
COUNT_BIG(*) AS [Total Plans],
SUM(CAST(size_in_bytes AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs],
AVG(usecounts) AS [Avg Use Count],
SUM(CAST((CASE WHEN usecounts = 1 THEN size_in_bytes
ELSE 0
END) AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs – USE Count 1],
SUM(CASE WHEN usecounts = 1 THEN 1
ELSE 0
END) AS [Total Plans – USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs – USE Count 1] DESC
GO
アドホックワークロードの最適化構成オプションを使用してプランキャッシュの膨張を最小化
SQL Server 2008は、「 アドホックワークロード用に最適化 」構成オプションを導入しました。このオプションを有効にすると、SQL Serverは、ステートメントが初めて実行されるときに完全なプランではなくプランスタブを作成します。プランが再度使用される場合、SQL Serverは完全なプランを格納します。このオプションは、プランキャッシュの膨張によるパフォーマンスへの影響を最小限に抑えるために導入されました。
もう一つお伝えしたいのは….
高コンパイル( 再コンパイルではない ):