Планы 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. Хотя он настроен на автоматическое обновление минорной версии, он, похоже, не позволяет нам быть в курсе последних новостей. Перезагрузите и установите это в эти выходные, чтобы видеть, помогает ли это.