KB3026083 - 수정 사항: 임시 SQL Server 계획 캐시에서 스핀 잠금 경합SOS_CACHESTORE 인해 SQL Server에서 CPU 사용량이 높아짐

적용 대상
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core

증상

동일한 해시 버킷에서 너무 많은 동시 삽입이 발생하거나 임시 SQL Server 계획 캐시가 항목 제한인 160,036에 도달하면 SOS_CACHESTORE 스핀 잠금에 대한 심각한 경합이 발생합니다. 이 경우 Microsoft SQL Server에서 CPU 사용량이 많이 발생합니다.

원인

이 문제는 SQL Server 계획 캐시가 진입 제한에 도달할 때 발생하며, 새 계획을 삽입하려면 비용이 저렴한 계획을 제거해야 합니다. 이로 인해 SQL Server 계획 캐시의 해시 테이블 버킷에 대한 동기화를 제공하는 SOS_CACHESTORE 스핀 잠금에 대한 경합이 심해집니다.

해결 방법

누적 업데이트 정보

이 문제는 다음 SQL Server 누적 업데이트에서 처음 해결되었습니다.

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 제품에서의 문제임을 확인했습니다.