我知道EF在应用程序级别上执行了一些执行计划的缓存,但是我想知道SQL Server是否在每个请求上生成执行计划。
我可以启用任何偏好来为任何查询(不仅是存储过程)制定SQL缓存执行计划。
答案 0 :(得分:0)
SQL Server在内存中缓存它生成的每个计划(不仅针对过程)。这些计划在那里可能不会太久。基本上,这取决于服务器的繁忙程度,您有多少RAM,如何按SQL Server的内存等等。您也可以启用查询存储,但这是SQL Server 2016中引入的新功能。有几个选项,但是它可以为您保存特定查询的计划和执行历史等。您可以使用此查询查看缓存中的实际内容:
SELECT
c.usecounts
,c.size_in_bytes
,c.objtype
,query.text
,plans.query_plan
FROM sys.dm_exec_cached_plans AS c
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS query
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS plans
ORDER BY c.usecounts DESC