Создает ли сервер SQL план выполнения каждый раз, когда запрашивает данные с помощью Entity Framework - PullRequest
0 голосов
/ 16 мая 2019

Я знаю, что EF выполняет некоторое кэширование планов выполнения на уровне приложения, но мне интересно знать, генерирует ли SQL-сервер план выполнения при каждом запросе.
Есть ли какие-либо предпочтения, которые я могу включить для выполнения кэширования SQLпланы для любых запросов, не только для процедур магазина.

1 Ответ

0 голосов
/ 16 мая 2019

SQL Server кэширует каждый план (не только для процедур), который он генерирует в памяти.Эти планы могут быть не длинными там.В основном это зависит от того, насколько занят ваш сервер, сколько у вас ОЗУ, как SQL-сервер используется для памяти и т. Д. Кроме того, вы можете включить хранилище запросов, но это новая функция, которая была введена в SQL-сервере 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
...