web-dev-qa-db-ja.com

「テーブル値関数」はプランを強制的にキャッシュに入れますか?

sp_executesqlおよびストアドプロシージャは、t-sqlから生成されたプランを強制的にキャッシュに入れますが、この動作はテーブル値関数と共有されますか?

1
A.HADDAD

この動作はテーブル値関数と共有されますか?

短い答えは次のとおりです。チェックすると キャッシュにある実行プラン なので、これらはそこにあるオブジェクトです。

cacheobjtype nvarchar(34)キャッシュ内のオブジェクトのタイプ。値は次のいずれかです。

  1. コンパイルされたプラン

  2. コンパイルされたプランスタブ

  3. パースツリー

  4. 拡張プロシージャ

  5. CLRコンパイル済み関数

  6. 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

enter image description here

アドホックワークロードの最適化構成オプションを使用してプランキャッシュの膨張を最小化

SQL Server 2008は、「 アドホックワークロード用に最適化 」構成オプションを導入しました。このオプションを有効にすると、SQL Serverは、ステートメントが初めて実行されるときに完全なプランではなくプランスタブを作成します。プランが再度使用される場合、SQL Serverは完全なプランを格納します。このオプションは、プランキャッシュの膨張によるパフォーマンスへの影響を最小限に抑えるために導入されました。

もう一つお伝えしたいのは….

高コンパイル( 再コンパイルではない ):

高コンパイルおよびマルチステートメントテーブル値関数

2