Ни DBCC FREEPROCCACHE, ни DBCC FREESYSTEMCACHE («Планы SQL») ничего не делают для освобождения памяти CACHESTORE_SQLCP

13

Планы CACHESTORE_SQLCP Sql занимают> 38 ГБ через несколько дней.

Мы уже работаем с опцией «Оптимизировать для специальных рабочих нагрузок». (Entity Framework и пользовательские отчеты создают много специальных действий!)

SQL Server 2016 SE 3.00.2164.0.v1 в AWS RDS с зеркальным отображением нескольких азотных зон

Когда я бегу:

DBCC FREESYSTEMCACHE('SQL Plans');

или

DBCC FREEPROCCACHE

или

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL

или

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

Кажется, это не проясняет:

SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb  desc

type                name        pages_kb
CACHESTORE_SQLCP    SQL Plans   38321048

Я работал с включенным Query Store, но я отключил его, чтобы посмотреть, не мешает ли это чему-либо, похоже, это не помогло, но я остановил его.

Что действительно странно, так это

SELECT COUNT(*) FROM sys.dm_exec_cached_plans

равно 1-3 или около того (кажется, что он показывает только когда-либо показанные в данный момент запросы), даже если вся эта память зарезервирована, даже до того, как я попытался что-то очистить Что мне не хватает?

CACHESTORE_SQLCP занимает более 60% всей доступной памяти, что является проблемой, поскольку время от времени происходит ожидание памяти. Кроме того, нам пришлось убить обычную DBCC CHECKDB в выходные дни, которая длилась 4 часа, потому что не хватало памяти, ожидание было занято (оно завершилось мгновенно, без ошибок при включенном PHYSICAL_ONLY).

Есть ли способ вернуть эту память (кроме ночных перезагрузок !?)?

График потребления памяти Диаграмма потребления памяти

Обновление из комментариев / ответов

Когда я бегу

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

я получил

entity_name subentity_name  permission_name
server      CONNECT SQL
server      CREATE ANY DATABASE
server      ALTER ANY LOGIN
server      ALTER ANY LINKED SERVER
server      ALTER ANY CONNECTION
server      ALTER TRACE
server      VIEW ANY DATABASE
server      VIEW ANY DEFINITION
server      VIEW SERVER STATE
server      ALTER SERVER STATE
server      CREATE SERVER ROLE
server      ALTER ANY SERVER ROLE

Что включает в себя необходимое ALTER SERVER STATEразрешение.

Выход DBCC FREEPROCCACHEявляется

Выполнение DBCC завершено. Если DBCC напечатал сообщения об ошибках, обратитесь к системному администратору.

Что является стандартным сообщением. Другие функции DBCC, которые не поддерживает RDS, выдают сообщения об ошибках о разрешениях.

(Днем позже и после этого снова, у Планов SQL все еще 38 321 280 кБ)

Обновление из комментариев / ответов

SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools

выходы:

pool_id name    cache_memory_kb  compile_memory_kb
1   internal    38368408         1168080

DBCC FREEPROCCACHE ('internal') не делает ничего по-другому

Обновить

Журнал ошибок SQL каждый раз регистрирует следующее:

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Обновить

На RDS доступно обновление версии двигателя с 13.00.2164.0.v1 до 13.00.4422.0.v1. Хотя он настроен на автоматическое обновление минорной версии, он, похоже, не позволяет нам быть в курсе последних новостей. Перезагрузите и установите это в эти выходные, чтобы видеть, помогает ли это.

Профессионально звучащее имя
источник

Ответы:

5

Я обновил до 13.00.4422.0.v1 (SQL Server 2016 SP1) и перезапустил.

Пока что я могу очистить память SQL Plan используя DBCC FREESYSTEMCACHE('SQL Plans');команду!

Время покажет, будет ли оно использовать память немного мудрее, но, по крайней мере, теперь у меня есть способ сбросить ее, если она снова станет раздутой.

Профессионально звучащее имя
источник
1
Тем не менее, я бы посоветовал не часто очищать SQLCP и идти дальше и выяснять основную причину
Shanky
Entity Framework и настраиваемая функция создания отчетов, которая позволяет практически любому пользователю выполнить практически любой запрос, создает множество запросов adhoc. Если бы был способ просто очистить их или даже сказать им, чтобы они никогда не кэшировались, это может помочь. До сих пор кеш плана составлял около 5,8 ГБ с момента установки SP1.
Профессионально
Вы включили Optimize for Ad-Hoc Workload. По сравнению с 38G, если он сейчас принимает 5 GI, думаю, что это не будет чем-то беспокоиться по поводу рабочей нагрузки
Shanky
Да, Оптимизация для Ad-Hoc Workload установлена ​​(как сказано выше в вопросе)
Профессиональное звучание Имя
1
Мы видели эту же проблему на 13.0.4001.0. Пришлось сбросить SQL, чтобы очистить кэш процесса. Ничего не компилировалось, но кэш процесса "завис" и не мог очистить, что бы мы ни пытались. Не видел, чтобы это повторилось со времени подпрыгивания SQL, но задаюсь вопросом, есть ли какая-то утечка памяти или ошибка.
GoodwinSQL,
3

Требования

Для запуска DBCC FREEPROCCACHEили DBCC FREESYSTEMCACHEвашей учетной записи требуется разрешение ALTER SERVER STATE.

Ссылки

  • DBCC FREESYSTEMCACHE (Transact-SQL) (Документы Microsoft)

    Требуется разрешение ALTER SERVER STATE на сервере.

  • DBCC FREEPROCCACHE (Transact-SQL) (Документы Microsoft)

    Относится к: SQL Server, параллельное хранилище данных

    • Требуется разрешение ALTER SERVER STATE на сервере.

Губернатор ресурсов

Разрешает ли AWS RDS настройки регуляторов ресурсов? Если да, то синтаксис:

DBCC FREEPROCCACHE ('<pool_name>'). 

Узнайте, есть ли у вас бассейны с:

SELECT * FROM sys.dm_resource_governor_resource_pools

Проверка разрешений

Выполните следующую команду, чтобы определить, есть ли у вас эти разрешения:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Ограничения / Ограничения

Существуют некоторые ограничения на разрешения, предоставляемые администраторам экземпляров AWS RDS, как описано в статье Microsoft SQL Server на Amazon RDS в главе Безопасность Microsoft SQL Server.

Вот краткий обзор:

Следующие роли уровня сервера в настоящее время недоступны в Amazon RDS:

  • bulkadmin
  • DBCreator
  • diskadmin
  • securityadmin
  • ServerAdmin
  • сисадмин

Следующие разрешения уровня сервера недоступны для экземпляров БД SQL Server:

  • АДМИНИСТРАТОР ПРОДУКЦИИ
  • ALTER ANY CREDENTIAL
  • ИЗМЕНЕНИЕ ЛЮБОГО СОБЫТИЯ
  • ПОСЛЕ КАЖДОЙ СЕССИИ СОБЫТИЙ
  • АЛЬТЕР ЛЮБОЙ СЕРВЕР АУДИТ
  • АЛЬТЕР РЕСУРСЫ
  • ALTER SETTINGS (Вы можете использовать API группы параметров БД для изменения параметров. Для получения дополнительной информации см. Работа с группами параметров БД.
  • АУТЕНТИЧНЫЙ СЕРВЕР
  • CONTROL_SERVER
  • СОЗДАЙТЕ УВЕДОМЛЕНИЕ О СОБЫТИИ DDL
  • СОЗДАТЬ ENDPOINT
  • СОЗДАЙТЕ УВЕДОМЛЕНИЕ О СОБЫТИИ
  • ВНЕШНИЙ ДОСТУП СБОРКА
  • ВЫКЛЮЧЕНИЕ (вместо этого можно использовать опцию перезагрузки RDS)
  • БЕЗОПАСНАЯ АССАМБЛЕЯ
  • ИЗМЕНИТЬ ЛЮБУЮ ГРУППУ ДОСТУПНОСТИ (только SQL Server 2012)
  • СОЗДАТЬ ЛЮБУЮ ГРУППУ ДОСТУПНОСТИ (только SQL Server 2012)

Эти ограничения могут быть изменены с момента публикации документа.

Другие источники

Брент Озар написал статью « SQL Server RDS », где отметил, что ...

Многие команды DBCC не работают вообще - DBCC DBINFOи DBCC LOGINFOбыли явно отклонены. Однако я обнаружил, что могу бегать DBCC FREEPROCCACHEтак часто, как хотел.

Имейте в виду, что эти ограничения могут меняться со временем - новые функции добавляются на регулярной основе.

Поддержка Amazon

Если ваша учетная запись имеет необходимые разрешения и вы не можете освободить кэш, вы можете открыть тикет поддержки в Amazon.

Джон ака hot2use
источник
Обновленный вопрос с более подробной информацией, основанной на этом. Спасибо за ваш вдумчивый и подробный ответ. Я сталкиваюсь с проблемами разрешений с другими вещами в RDS, но это должно поддерживаться. Я свяжусь со службой поддержки Amazon сегодня, если не получу много активности здесь. Это больше похоже на проблему с SQL Server, чем на проблему RDS, и я не знаю, насколько опытной или конкретной будет их поддержка по сравнению с этим замечательным сообществом!
Профессионально
1
Я ценю ваши отзывы. Я полагаю, вы могли бы открыть билет для Amazon или Microsoft, видя, что ничего не работает. И опять же, это может быть ошибка или особенность (ограничение из-за ....).
Джон aka hot2use