증상
동일한 해시 버킷에서 동시 삽입이 너무 많거나 임시 SQL Server 계획 캐시가 진입 제한인 160,036에 도달하면 SOS_CACHESTORE 스핀 잠금에 대한 심각한 경합이 발생합니다. 이 경우 Microsoft SQL Server 높은 CPU 사용량이 발생합니다.
원인
이 문제는 SQL Server 계획 캐시가 진입 한도에 도달하고 새 계획을 삽입하기 위해 비용이 낮은 계획을 제거해야 하는 경우에 발생합니다. 이로 인해 SQL Server 계획 캐시의 해시 테이블 버킷에 대한 동기화를 제공하는 SOS_CACHESTORE 스핀 잠금에 대한 경합이 심합니다.
해결 방법
누적 업데이트 정보
이 문제는 다음과 같은 SQL Server 누적 업데이트에서 처음 해결되었습니다.
SQL Server 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스 및 모든 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.
추가 정보
계획 캐시에는 총 크기와 모든 계획의 총 수라는 두 가지 제한이 있습니다. 크기 및 항목 수 제한은 다음 백서에 설명되어 있습니다.
계획 캐시에서 보유할 수 있는 최대 항목 수는 버킷 수의 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 제품에서 이 문제를 확인했습니다.