CACHESTORE_SQLCP Плани Sql займають понад 38 Гб через кілька днів.
Ми вже працюємо з опцією "оптимізувати для спеціальних навантажень". (Entity Framework та спеціальні звіти створюють багато рекламних кампаній!)
SQL Server 2016 SE 3.00.2164.0.v1 на AWS RDS з дзеркальним відображенням з декількома AZ
Коли я бігаю:
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
Я працював з увімкненим магазином запитів, але я відключив його, щоб побачити, чи це щось заважає, схоже, це не допомогло, але я його відключив.
Те, що насправді дивно, також є
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 Plans все ще становить 38,321,280 kb)
Оновлення з коментарів / відповідей
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. Незважаючи на те, що він налаштований на оновлення авто-другорядних версій, воно, здається, не оновлює нас до останнього. Перезавантажимось та встановимо це у вихідні, щоб побачити, чи допомагає це.