증상
동일한 해시 버킷에 너무 많은 동시 삽입이 발생 하거나 임시 SQL Server 계획 캐시가 160036의 항목 제한에 도달 하면 SOS_CACHESTORE spinlock에 대 한 심각한 경합이 발생 합니다. 이 경우 Microsoft SQL Server에서 높은 CPU 사용률이 발생 합니다.
원인
이 문제는 SQL Server 계획 캐시가 해당 입력 제한에 도달 하는 경우 비용을 저렴 한 계획을 제거 하 여 새 계획을 삽입 하는 경우 발생 합니다. 이렇게 하면 SQL Server 계획 캐시의 해시 테이블 버킷에 대 한 동기화를 제공 하는 SOS_CACHESTORE 스핀 잠금에 대 한 경합이 많이 발생 합니다.
해결 방법
누적 업데이트 정보
이 문제는 다음 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 계획 캐시의 버킷 수는 40009입니다. 따라서 SQL Server 계획 캐시 내에 들어갈 수 있는 최대 항목 수는 160036입니다.
다른 임의 쿼리를 사용 하는 작업 부하가 있는 경우이 한도 병목 상태가 될 수 있습니다. 이 핫픽스에 의해 변경 된 내용은이 문제를 해결 합니다. 이 핫픽스를 설치 하 고 시작 추적 플래그 "-T 174"를 사용 하 여 변경 내용을 설정한 후에는 버킷 수가 64 비트 시스템의 160001으로 늘어났습니다. 그런 다음 계획 캐시에 최대 640004 계획을 보유할 수 있습니다.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.