주요 콘텐츠로 건너뛰기 이 브라우저는 더 이상 지원되지 않습니다. Show 최신 기능, 보안 업데이트, 기술 지원을 이용하려면 Microsoft Edge로 업그레이드하세요. SQL Server의 높은 CPU 사용량 문제 해결
이 문서의 내용적용 대상: SQL Server 이 문서에서는 Microsoft SQL Server를 실행하는 컴퓨터에서 높은 CPU 사용량으로 인해 발생하는 문제를 진단하고 수정하는 절차를 제공합니다. SQL Server에서 높은 CPU 사용량이 발생하는 원인은 여러 가지가 있지만 가장 일반적인 원인은 다음과 같습니다.
다음 단계를 사용하여 SQL Server에서 CPU 사용량이 많은 문제를 해결할 수 있습니다. 1단계: SQL Server가 높은 CPU 사용량을 유발하는지 확인다음 도구 중 하나를 사용하여 SQL Server 프로세스가 실제로 높은 CPU 사용량을 유발하는지 확인합니다.
2단계: CPU 사용량을 높이는 쿼리 식별
현재 높은 CPU 활동을 담당하는 쿼리를 식별하려면 다음 명령문을 실행합니다.
현재 쿼리가 CPU를 구동하지 않는 경우 다음 명령문을 실행하여 과거 CPU 바운드 쿼리를 찾을 수 있습니다.
3단계: 통계 업데이트CPU 사용량이 가장 높은 쿼리를 식별한 후 이러한 쿼리에서 사용하는 테이블의 통계를 업데이트합니다.
참고
SQL Server가 여전히 과도한 CPU 용량을 사용하고 있으면 다음 단계로 이동합니다. 4단계: 누락된 인덱스 추가인덱스가 누락되어 실행 중인 쿼리가 느려지고 CPU 사용량이 높아질 수 있습니다. 누락된 인덱스를 식별하고 생성하여 이러한 성능 영향을 개선할 수 있습니다.
5단계: 매개 변수에 민감한 문제 조사 및 해결DBCC FREEPROCCACHE 명령을 사용하여 계획 캐시를 해제하고 높은 CPU 사용량 문제를 해결하는지 확인할 수 있습니다. 문제가 해결되면 매개 변수에 민감한 문제(PSP, "매개변수 스니핑 문제"라고도 함)를 나타냅니다. 참고 매개 변수 없이 매개 변수에 민감한 문제를 완화하려면 다음 방법을 사용하세요. 각 방법에는 관련된 절충안과 단점이 있습니다.
6단계: SARGability 문제 조사 및 해결SQL Server 엔진이 인덱스 탐색을 사용하여 쿼리 실행 속도를 높일 수 있는 경우 쿼리의 조건자는 SARGable(검색 ARGument 가능)로 간주됩니다. 많은 쿼리 디자인은 SARG 가능성을 방지하고 테이블 또는 인덱스 스캔과 높은 CPU 사용량으로 이어집니다. 문자열 리터럴 값과 비교하기 전에 모든
검색 조건자의 열에 함수나 계산을 적용하면 일반적으로 쿼리가 사거블(Sargable)이 되지 않고 CPU 사용량이 증가합니다. 솔루션에는 일반적으로 SARGable을 만들기 위해 창의적인 방식으로 쿼리를 다시 작성하는 작업이 포함됩니다. 이 예제의 가능한 솔루션은 쿼리 조건자에서 함수가 제거되고 다른 열이 검색되고 동일한 결과가 달성되는 경우 다시 작성하는 것입니다.
다음은 영업 관리자가 대량 주문에 대해 10%의 판매 수수료를 제공하고 $300보다 큰 수수료가 있는 주문을 확인하려는 또 다른 예입니다. 논리적이지만 비구성적인 방법은 다음과 같습니다.
다음은 계산이 술어의 다른 쪽으로 이동되는 쿼리의 덜 직관적이지만 SARGable 재작성입니다.
SARGability는
또 다른 솔루션은 동일한
경우에 따라 SARGability를 허용하기 위해 쿼리를 쉽게 다시 작성할 수 없습니다. 이러한 경우 인덱스가 있는 계산 열이 도움이 될 수 있는지 확인하거나 더 높은 CPU 시나리오로 이어질 수 있다는 인식과 함께 쿼리를 그대로 유지합니다. 7단계: 상세 추적 사용 안 함SQL Server의 성능에 영향을 미치고 높은 CPU 사용량을 유발하는 SQL Trace 또는 XEvent 추적을 확인합니다. 예를 들어 다음 이벤트를 사용하면 많은 SQL Server 작업을 추적하는 경우 높은 CPU 사용량이 발생할 수 있습니다.
활성 XEvent 또는 서버 추적을 식별하려면 다음 쿼리를 실행합니다.
8단계: SOS_CACHESTORE 스핀록 경합 수정SQL Server 인스턴스에서 해결 방법: 임시 SQL Server 계획 캐시의 SOS_CACHESTORE 스핀 잠금 경합으로 인해 SQL Server에서 높은 CPU 사용량이 발생합니다. 높은 CPU 조건이 참고 CPU가 높으면 다른 많은 스핀 잠금 유형에서 스핀 잠금 경합이 발생할 수 있지만 9단계: 가상 머신 구성가상 머신을 사용하는 경우 CPU를 오버프로비전하지 않고 올바르게 구성되었는지 확인합니다. 자세한 내용은 ESX/ESXi 가상 머신 성능 문제 해결(2001003)을 참조하세요. 10단계: 더 많은 CPU를 사용하도록 시스템 강화개별 쿼리 인스턴스에서 CPU 용량을 거의 사용하지 않지만 모든 쿼리의 전체 워크로드로 인해 CPU 사용량이 많은 경우 CPU를 더 추가하여 컴퓨터를 확장하는 것이 좋습니다. 다음 쿼리를 사용하여 실행당 평균 및 최대 CPU 사용량의 특정 임계값을 초과하고 시스템에서 여러 번 실행된 쿼리 수를 찾습니다(환경에 맞게 두 변수의 값을 수정해야 합니다).
참고 항목
Additional resources |