보류 보류 보류
성능 및 라이센스 측면은 흥미롭지 만 고려해야 할 작업의 유일한 측면은 아닙니다.
프로세서 선택에 영향을 줄 수있는 한 가지는 작업자 스레드입니다.
작업자 스레드?
그래 친구! 그것들은 SQL Server가 쿼리를 실행하고 상황을 유지하는 데 필요한 모든 배경 작업을 수행하는 데 사용하는 것입니다.
작업자 스레드가 부족 하면 THREADPOOL 대기
스레드 풀?
스레드 풀. 이것은 RESOURCE_SEMAPHORE 및 RESOURCE_SEMAPHORE_QUERY_COMPILE 과 함께 서버에서 가질 수있는 가장 빠른 대기 중 하나입니다 . 그러나 이것들은 메모리 대기이며, 이것은 CPU 질문입니다.
이것이 왜 위그 위크 (Wagity Wack) 인 이유로 돌아가겠습니다.
이것은 SQL Server가 작업자 스레드를 계산하는 방법입니다 .
코어 수를 두 배로 늘려도 Max Worker Threads가 두 배가되지 않고 4 개의 코어에서와 같이 1 개의 코어로 같은 수를 얻습니까? 방정식은 다음과 같습니다.512 + ((logical CPUs - 4) * 16)
코어 카운트가 증가 할 때 클럭 속도는 일반적으로 한두 세대로 돌아 가기 때문에 부끄러운 일입니다.
최근 인텔 칩 라인을 살펴보면 비슷한 경향이 나타납니다.
필요한 스레드 수를 어떻게 알 수 있습니까?
이것은 많은 것에 달려 있습니다 :
- 사용자 수
- 병렬 쿼리 수
- 연속 쿼리 수
- 데이터베이스 수 및 데이터 동기화 (미러링, AG, 로그 전달 용 백업)
- MAXDOP 및 CTFP를 기본값으로두면
오늘 부족하지 않다면 아마 괜찮을 것입니다.
그러나 당신이 있는지 어떻게 알 수 있습니까?
좋은 질문이 있고 좋은 질문이 있으며 lemme이 당신에게 무언가를 말해줍니다 . 그것은 위대한 질문 입니다.
THREADPOOL은 연결 문제로 나타날 수 있으며 오류 로그에 스레드 를 생성 할 수 없다는 메시지가 표시 될 수 있습니다 .
sp_Blitz 또는 sp_BlitzFirst 와 같은 무료 도구를 사용하여 서버의 대기 통계를 볼 수도 있습니다 (전체 공개,이 프로젝트에 기여합니다).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Max Worker Threads 만 늘릴 수 없습니까?
MWT를 늘리면 SOS_SCHEDULER_YIELD
대기 시간 이 늘어날 수 있습니다 .
그것은 세상의 끝이 아니지만, 선생님의 수업에 소리 지르는 아이들을 추가하는 것처럼 생각하십시오.
갑자기, 각 아이들이주의를 끌기가 더 어려워 질 것입니다.
프로세스 가 4ms quantum을 소진 하면 CPU보다 많은 스레드가 대기 할 가능성이 있습니다.
성능은 거의 비슷할 수 있습니다.
더 적은 수의 작업자 스레드를 사용하려면 어떻게해야합니까?
당신은 [명사]의 잔인한 [명사], 그들은 지원할 가족과 노동자입니다! 모기지! 꿈!
그러나 흠, 결론을 존중해야합니다. 당신은 보스입니다.
시작하기 가장 쉬운 곳은 MAXDOP 및 Cost Threshold For Parallelism과 같은 설정을 기본값에서 변경하는 것입니다.
설정 방법에 대해 궁금한 점이 있으면 여기로 이동하십시오.
그 후, 당신의 일은 훨씬 더 어려워집니다. 모든 스레드를 사용하는 것이 무엇인지 알아 내야합니다. 대기 통계를 보면 때때로 그렇게 할 수 있습니다.
보다 구체적으로, 병렬 처리에 대한 높은 대기 시간 ( CXPACKET
)과 잠금에 대한 높은 대기 시간 ( LCK_
)이있는 경우 병렬 쿼리와 관련된 긴 블로킹 체인이 실행될 수 있습니다.
무슨 냄새가 나는지 알아? 모든 병렬 쿼리가 잠금을 얻기 위해 대기하는 동안 할당 된 스레드를 다시 제공하지 않습니다.
관리자가 확인한 4 개의 핵심 VM이 모든 작업 부하를 처리하기에 충분하다고 들었을 것입니다.
불행히도, 그 문제를 해결하기 위해 수행 해야하는 쿼리 및 인덱스 튜닝 유형은 문제의 범위를 벗어납니다.
이것이 도움이되기를 바랍니다!