Ні 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 з дзеркальним відображенням з декількома 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. Незважаючи на те, що він налаштований на оновлення авто-другорядних версій, воно, здається, не оновлює нас до останнього. Перезавантажимось та встановимо це у вихідні, щоб побачити, чи допомагає це.

Відповіді:


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

Так, налаштовано оптимізацію для спеціального робочого навантаження (як сказано вище в питанні)
Професійне звучання Назва

1
Ми бачили цей самий номер 13.0.4001.0. Довелося відскочити SQL, щоб очистити кеш-пам'ять процесів. Нічого не збиралося, але кеш процесів "застряг" і не зрозумів би, що б ми не намагалися. Не бачив, як це повторилося з часу підстрибування SQL, але дивуйтеся, чи є якась витік пам'яті або помилка.
GoodwinSQL

3

Вимоги

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

Список літератури

  • DBCC FREESYSTEMCACHE (Transact-SQL) (Microsoft Docs)

    Потрібен дозвіл НА СЛУЖБУ ДЛЯ СЕРВЕРА на сервері.

  • DBCC FREEPROCCACHE (Transact-SQL) (Microsoft Docs)

    Застосовується до: SQL Server, сховища даних паралельних даних

    • Потрібен дозвіл НА СЛУЖБУ ДЛЯ СЕРВЕРА на сервері.

Управління ресурсами

Чи дозволяє 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 Security

Ось огляд:

Наступні ролі рівня сервера наразі недоступні в RDS Amazon:

  • булькамін
  • dbcreator
  • діскадмін
  • securityadmin
  • serveradmin
  • сисадмін

Наступні дозволи на рівні сервера недоступні в екземплярах БД SQL Server:

  • ОПЕРАЦІЇ БУЛЬКОГО АДМІНІСТРА
  • АЛЬТЕ ЯКЩО КРЕДЕНТАЛЬНО
  • ПІД ЧАС НІКОГО ПОВІДОМЛЕННЯ про події
  • ПІДКЛЮЧЕННЯ ЯКЩО-небудь СЕСІЇ
  • АЛЬТЕ ЯКЩО-небудь АУДИТОР СЕРВЕРА
  • АЛЬТЕР РЕСУРСИ
  • НАПРАВЛЕННЯ НАЛАШТУВАННЯ (Ви можете використовувати API групи параметрів DB для зміни параметрів. Для отримання додаткової інформації див. Робота з групами параметрів БД.
  • АВТОМЕНТИЧНИЙ СЕРВЕР
  • CONTROL_SERVER
  • Створіть повідомлення про події DDL
  • СТВОРИТИ РОЗВИТКУ
  • СТВОРИТИ СЛУХАЛЬНЕ ПОВІДОМЛЕННЯ
  • ЗОВ'ЯЗАННЯ ЗОВНІШНЬОГО ДОСТУПУ
  • SHUTDOWN (замість цього можна скористатися параметром RDS перезавантаження)
  • ЗБЕРІГАЄТЬСЯ
  • ВІДКЛЮЧЕННЯ БУДЬ-ЯКОЇ ГРУПИ ДОСТУПНОСТІ (лише для SQL Server 2012)
  • Створіть будь-яку групу доступності (лише для SQL Server 2012)

Ці обмеження / обмеження, можливо, змінилися з моменту опублікування документа.

Інші ресурси

Брент Озар написав статтю " RQL SQL Server ", де зазначив, що ...

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

Майте на увазі, що ці обмеження можуть змінюватися з часом - нові функції додаються регулярно.

Підтримка Amazon

Якщо ваш обліковий запис має необхідні дозволи та ви не можете звільнити кеш-пам'ять, можливо, ви захочете відкрити службу підтримки в Amazon.


Оновлене запитання з більш детальною інформацією на основі цього. Дякую за продуману та детальну відповідь. Я натрапляю на проблеми з дозволами з іншими речами в RDS, але це слід підтримувати. Пізніше сьогодні я зв’яжуся зі службою підтримки Amazon, якщо тут я не отримаю особливої ​​активності. Це здавалося більше схожим на проблему SQL Server, ніж проблему RDS, і я не знаю, наскільки знана чи конкретна їх підтримка буде порівняна з цією прекрасною спільнотою!
Ім'я професійного звучання

1
Я ціную ваші відгуки. Я думаю, ви, можливо, захочете відкрити квиток з Amazon або Microsoft, оскільки, здається, нічого не працює. І знову ж таки, це може бути помилка чи особливість (обмеження через ....).
Джон ака hot2use
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.