План виселення вимірювального плану


9

У нас є SQL Server 2016 SP1 з максимальною пам’яттю на 24 ГБ.
Цей сервер має велику кількість компіляцій, лише 10% цих компіляцій - від спеціальних запитів. Отже, щойно складені плани повинні зберігатися в кеші плану, але розмір кешу плану не збільшується (приблизно 3,72 ГБ).

Я підозрюю, що існує локальний тиск пам'яті, який призводить до видалення планів із кешу. Межа тиску кеш-плану - 5 Гб. (75% видимої цільової пам'яті від 0-4GB + 10% видимої цільової пам'яті від 4GB-64GB + 5% видимої цільової пам'яті> 64GB). Коли кашпо досягає 75% від межі тиску, плани повинні бути вилучені з кеша. У моєму випадку 75% від 5 ГБ - 3,75 ГБ. Тож правдоподібно це і є причиною високих компіляцій.

Чи є спосіб виміряти (perfmon, розширені події, ...) видалення з планів із кешу? Тож я можу бути впевненим, що тиск локальної пам'яті справді є причиною високих компіляцій?

Відповіді:


9

Для цього є XEvent:

query_cache_removal_statistics

Виникає, коли план запитів видаляється з кешу плану, а історична статистика об’єкта збирається знищити

Тож щось на кшталт:

CREATE EVENT SESSION [PlanCacheEvictions] ON SERVER 
ADD EVENT sqlserver.query_cache_removal_statistics(
    ACTION(sqlserver.sql_text))

Крім того, якщо у вашому кеш-програмі є велика кількість планів одноразового використання, розгляньте налаштування оптимізації для спеціальних навантажень .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.