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


Я не знаю ни одного ... но в целом я думаю, что в большинстве высокопроизводительных ситуаций, когда вас беспокоит такой уровень детализации, вам, вероятно, понадобится производственная база данных, защищенная от пользователей. отправленные запросы в первую очередь. В производственной среде вам может навредить не немного памяти для этих планов запросов, а пользователи, отправляющие запросы, которые вызывают массивные блокировки и останавливают вашу производительность. В качестве основной архитектурной проблемы вы можете рассмотреть:
Если вы действительно не можете сделать ни одно из этих действий, а планы запросов, отправленные пользователями, вас действительно расстраивают, вы, должно быть, оказались в довольно уникальной ситуации. Если вы хотите отредактировать вопрос с более подробной информацией, вы можете получить более точные предложения.
(Извините, я не ответил на вопрос, который вы на самом деле задали; надеюсь, кто-то более осведомленный, чем я, сделает это.)
Я думаю, что, вероятно, нет необходимости беспокоиться об ограничении этого, но вы можете начать здесь и обсуждение связаны там
Вы можете повлиять на то, как SQL-сервер обрабатывает специальные запросы и кэширование планов, установив параметр «оптимизировать для специальных рабочих нагрузок» в соответствии с http://msdn.microsoft.com/en-us/library/cc645587.aspx.
По сути, это означает, что при первом вызове специального запроса не кэшируйте план, а сохраняйте информацию о том, что этот запрос был вызван. При повторном вызове того же специального запроса план будет кэширован.
Мы установили это на одном из наших производственных серверов и сразу освободили 2 ГБ ОЗУ, что больше говорит о текущей рабочей нагрузке на этот сервер, чем о чем-либо (и не очень хорошо)