Objawy
Gdy w tym samym zasobniku skrótów występuje zbyt wiele jednoczesnych wstawień lub pamięć podręczna planu SQL Server ad hoc osiąga limit wpisu wynoszący 160 036, występuje poważna rywalizacja o SOS_CACHESTORE spinlock. W takiej sytuacji występuje wysokie użycie procesora CPU w Microsoft SQL Server.
Przyczyna
Ten problem występuje, gdy pamięć podręczna planu programu SQL Server osiąga limit wpisów, a plany o niskim koszcie muszą zostać usunięte w celu wstawienia nowych planów. Powoduje to silną rywalizację o SOS_CACHESTORE spinlock, który zapewnia synchronizację dla zasobników tabeli skrótów pamięci podręcznej planu SQL Server.
Rozwiązanie
Informacje o aktualizacji zbiorczej
Ten problem został po raz pierwszy rozwiązany w następującej aktualizacji zbiorczej programu SQL Server.
- Aktualizacja zbiorcza 1 dla programu SQL Server 2014 z dodatkiem SP1
- Aktualizacja skumulowana 5 dla programu SQL Server 2012 z dodatkiem SP2
- Aktualizacja zbiorcza 6 dla programu SQL Server 2014
- Aktualizacja zbiorcza 14 dla programu SQL Server 2012 z dodatkiem SP1
Informacje o aktualizacjach zbiorczych dla programu SQL Server
Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:
- Najnowsza aktualizacja zbiorcza dla programu SQL Server 2014 z dodatkiem SP1
- Najnowsza aktualizacja zbiorcza dla programu SQL Server 2012 z dodatkiem SP2
- Najnowsza aktualizacja zbiorcza dla programu SQL Server 2014
- Najnowsza aktualizacja zbiorcza dla programu SQL Server 2012 z dodatkiem SP1
Pamięć podręczna planu ma dwa limity: całkowitego rozmiaru i łącznej liczby wszystkich planów. Limity rozmiaru i liczby wpisów wyjaśniono w następującym oficjalnym dokumencie:
Planowanie wewnętrznych elementów pamięci podręcznej
Maksymalna liczba wpisów, które może pomieścić pamięć podręczna planu, jest czterokrotnie większa niż liczba zasobników. Możesz zweryfikować te informacje, uruchamiając następujące zapytania:
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' )
Na przykład w systemach 64-bitowych liczba zasobników pamięci podręcznej planu programu SQL Server wynosi 40 009. Dlatego maksymalna liczba wpisów, które mogą się zmieścić w pamięci podręcznej planu programu SQL Server, wynosi 160 036.
W przypadku obciążenia pracą, która używa różnych zapytań ad hoc, ten limit może stać się wąskim gardłem. Zmiana wprowadzona przez tę poprawkę rozwiązuje ten problem. Po zainstalowaniu tej poprawki i włączeniu zmiany za pomocą flagi śledzenia uruchamiania "-T 174" liczba zasobników zostanie zwiększona do 160 001 w systemach 64-bitowych. Pamięć podręczna planu może wtedy przechowywać maksymalnie 640 004 plany.
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.