Измерение плана выселения

9

У нас есть SQL Server 2016 SP1 с максимальным объемом памяти 24 ГБ.
Этот сервер имеет большое количество компиляций, только 10% этих компиляций являются запросами Ad-Hoc. Поэтому вновь скомпилированные планы должны храниться в кэше планов, но размер кэша планов не увеличивается (около 3,72 ГБ).

Я подозреваю, что существует локальная нагрузка на память, которая приводит к удалению планов из кэша. Предел давления в кэше плана составляет 5 ГБ. (75% видимой целевой памяти из 0-4 ГБ + 10% видимой целевой памяти из 4–64 ГБ + 5% видимой целевой памяти> 64 ГБ). Когда хранилище кэша достигает 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))

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

Дэвид Браун - Microsoft
источник