Симптоми
Когато в един и същи набор хешове се появяват твърде много едновременни вмъквания или когато кешът на плана за ad hoc SQL Server достигне ограничението си за влизане от 160 036, възниква сериозно състезание за SOS_CACHESTORE завъртане. В тази ситуация в Microsoft SQL Server се наблюдава високо натоварване на процесора.
Причина
Проблемът възниква, когато кешът за плана на SQL Server достигне прага си за влизане и плановете, които са с ниска цена, трябва да бъдат извадени, за да се вмъкнат нови планове. Това води до сериозни състезания за SOS_CACHESTORE spinlock, който осигурява синхронизиране за наборите хеширащи таблици на кеша на плана за SQL Server.
Решение
Информацията за кумулативната актуализация
Проблемът е коригиран за първи път в следващата кумулативна актуализация на SQL Server.
- Сборна актуализация 1 за SQL Server 2014 SP1
- Сборна актуализация 5 за SQL Server 2012 SP2
- Сборна актуализация 6 за SQL Server 2014
- Сборна актуализация 14 за SQL Server 2012 SP1
За кумулативните актуализации за SQL Server
Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте последните кумулативни актуализации за SQL Server:
- Последна кумулативна актуализация за SQL Server 2014 SP1
- Последна кумулативна актуализация за SQL Server 2012 SP2
- Последна сборна актуализация за SQL Server 2014
- Последна сборна актуализация за SQL Server 2012 SP1
Кешът на плана има две ограничения: Общият размер и общият брой на всички планове. Ограниченията за размер и брой записи са обяснени в следната техническа документация:
Планиране на вътрешни елементи на кеша
Максималният брой записи, който кешът за план може да помести, е четири пъти по-голям от броя на наборите. Можете да проверите тази информация, като изпълните следните заявки:
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, е 160 036.
Ако имате работно натоварване, което използва различни заявки за конкретна цел, това ограничение може да се окаже слабо звено. Промяната, която се прави от тази гореща корекция, решава тази ситуация. След като инсталирате тази гореща корекция и разрешите промяната с помощта на флага за проследяване при стартиране "-T 174", броят набори се увеличава до 160 001 на 64-битови системи. Кешът на плана след това може да побере най-много 640 004 плана.
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.