Sql-Server

“表值函式”是否強制計劃進入記憶體?

  • May 11, 2020

sp_executesql和儲存過程強制從 t-sql 生成的計劃放入記憶體中,這種行為是否與表值函式共享?

這種行為是否與表值函式共享?

簡短的回答是:不是,因為如果您檢查記憶體中有哪些執行計劃,這些是您可以在那裡找到的對象:

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

在此處輸入圖像描述

使用優化即席工作負載配置選項最大限度地減少計劃記憶體膨脹

SQL Server 2008 引入了“針對臨時工作負載進行優化”配置選項,啟用該選項後,SQL Server 會在第一次執行語句時創建計劃存根而不是完整計劃。如果第二次使用該計劃,則 SQL Server 將儲存完整的計劃。引入此選項是為了幫助最大限度地減少計劃記憶體膨脹對性能的影響。

我想提的另一件事是..

高編譯(不重新編譯):

高編譯和多語句表值函式

引用自:https://dba.stackexchange.com/questions/266885