증상
동일한 해시 버킷에서 너무 많은 동시 삽입이 발생하거나 임시 SQL Server 계획 캐시가 항목 제한인 160,036에 도달하면 SOS_CACHESTORE 스핀 잠금에 대한 심각한 경합이 발생합니다. 이 경우 Microsoft SQL Server에서 CPU 사용량이 많이 발생합니다.
원인
이 문제는 SQL Server 계획 캐시가 진입 제한에 도달할 때 발생하며, 새 계획을 삽입하려면 비용이 저렴한 계획을 제거해야 합니다. 이로 인해 SQL Server 계획 캐시의 해시 테이블 버킷에 대한 동기화를 제공하는 SOS_CACHESTORE 스핀 잠금에 대한 경합이 심해집니다.
해결 방법
누적 업데이트 정보
이 문제는 다음 SQL Server 누적 업데이트에서 처음 해결되었습니다.
- SQL Server 2014 SP1용 누적 업데이트 1
- SQL Server 2012 SP2용 누적 업데이트 5
- SQL Server 2014용 누적 업데이트 6
- SQL Server 2012 SP1용 누적 업데이트 14
SQL Server의 누적 업데이트 정보
SQL Server에 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스와 모든 보안 수정 사항이 포함되어 있습니다. SQL Server에 대한 최신 누적 업데이트를 확인하세요.
- SQL Server 2014 SP1용 최신 누적 업데이트
- SQL Server 2012 SP2용 최신 누적 업데이트
- SQL Server 2014용 최신 누적 업데이트
- SQL Server 2012 SP1용 최신 누적 업데이트
계획 캐시에는 두 가지 제한이 있습니다. 전체 크기와 모든 계획의 총 개수입니다. 크기 및 출입 횟수 제한은 다음 백서에 설명되어 있습니다.
계획 캐시가 보유할 수 있는 최대 항목 수는 버킷 수의 4배입니다. 다음 쿼리를 실행하여 이 정보를 확인할 수 있습니다.
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"를 사용하여 변경을 사용하도록 설정하면 64비트 시스템에서 버킷 수가 160,001개로 증가합니다. 그런 다음 계획 캐시는 최대 640,004개의 계획을 보유할 수 있습니다.
상태
Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.