Ознаки
Якщо в одному геш-блоці відбувається забагато одночасних вставлень або кеш плану спеціальної SQL Server досягає обмеження на введення 160 036, виникають серйозні суперечки на SOS_CACHESTORE спінлок. У цій ситуації високий рівень використання ЦП відбувається в Microsoft SQL Server.
Причина
Ця проблема виникає, коли кеш плану SQL Server досягає граничного значення для введення, а плани з низькими витратами необхідно виселити, щоб вставити нові плани. Це призводить до важких суперечок для SOS_CACHESTORE спінлок, який забезпечує синхронізацію для геш-таблиці блоки кеш SQL Server плану.
Спосіб вирішення
Відомості про сукупне оновлення
Спочатку цю проблему вирішено в наступному сукупному оновленні SQL Server.
Кожен новий сукупний пакет оновлень для SQL Server містить усі виправлення та всі виправлення системи безпеки, які входили в попередній сукупний пакет оновлень. Ознайомтеся з останніми сукупними оновленнями для SQL Server:
Додаткові відомості
Кеш плану має два обмеження: загальний розмір і загальна кількість усіх планів. Обмеження кількості записів і розмірів елементів описано в офіційному документі:
Максимальна кількість записів, які може містити кеш плану, учетверо становить кількість блоків. Щоб перевірити ці відомості, виконайте такі запити:
select name, type, buckets_count
from sys.dm_os_memory_cache_hash_tables
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
select name, type, pages_kb, entries_count
from sys.dm_os_memory_cache_counters
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
Наприклад, у 64-розрядних системах кількість блоків для кеша плану SQL Server становить 40 009. Таким чином, максимальна кількість записів, які можуть поміститися в кеші плану SQL Server становить 160036.
Якщо у вас є навантаження, у якому використовуються різні спеціальні запити, це обмеження може стати вузьким місцем. Зміни, внесені в цьому виправленні усуває цю ситуацію. Після інсталяції цього виправлення та ввімкнути зміни за допомогою запуску трасування позначка "-T 174", кількість сегмента збільшується до 160001 на 64-розрядних систем. Кеш плану може містити не більше 640 004 планів.
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "Стосується".