Планы SQL Server exec для специальных запросов, заполняющих кэш планов - PullRequest
0 голосов
/ 01 ноября 2011

У нас есть база данных, которая обновляется каждый час.Изменения вносятся приложением, которое использует DELETE / INSERT для каждой строки, которая обновляется или вставляется.SQL Server 2008 R2 Standard Edition.

Планы выполнения запросов для специальных запросов выталкивают другие (более важные, более крупные) планы выполнения, которые влияют на отчеты по этой базе данных и поглощают кэш данных.

После просмотраВ кеше планов мы обнаружили, что (как и ожидалось) SQL генерирует новый план для каждого запроса.

Мой вопрос заключается в том, остановит ли создание руководства по плану создание нового плана для каждого обновления в SQL?

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

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

Спасибо.

1 Ответ

0 голосов
/ 01 ноября 2011

Вы пробовали включить 'оптимизировать для специальных рабочих нагрузок' ?

Оптимизация для специальных рабочих нагрузок используется для улучшения эффективность кэша плана для рабочих нагрузок, которые содержат много использовать специальные партии. Когда эта опция установлена ​​в 1, компонент Database Engine сохраняет небольшую скомпилированную заглушку плана в кэше планов, когда пакет составлен впервые, вместо полного скомпилированного плана. это помогает уменьшить нагрузку на память, не позволяя кэшу плана наполняться скомпилированными планами, которые не используются повторно.

Установка оптимизации для специальных рабочих нагрузок на 1 влияет только на новые планы; планы, которые уже находятся в кэше планов, не затрагиваются.

1012 * Ref *.

Планирование кэша и оптимизация для рабочих нагрузок adhoc

Чтобы включить эту функцию, используйте следующие команды (я бы сначала проверил в тестовой системе):

SP_CONFIGURE 'show advanced options',1
RECONFIGURE
GO

SP_CONFIGURE 'optimize for ad hoc workloads',1
RECONFIGURE
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...