최근 서버 중 하나에 작업자 스레드가 부족한 SQL Server 2014 HADR 환경에 문제가있었습니다.
우리는 메시지를 받았습니다 :
사용 가능한 작업자 스레드가 충분하지 않기 때문에 AlwaysOn 가용성 그룹의 스레드 풀에서 새 작업자 스레드를 시작할 수 없습니다.
나는 이미 다른 질문을 열어서 문제를 분석하는 데 도움이되는 진술을 얻었습니다 ( 어떤 SPID가 어떤 스케줄러 (작업자 스레드)를 사용하는지 볼 수 있습니까? ). 시스템을 사용하는 스레드를 찾기위한 쿼리가 있지만 서버에 작업자 스레드가 부족한 이유를 이해할 수 없습니다.
우리의 환경은 다음과 같습니다.
- 4 Windows Server 2012 R2
- SQL Server 2014 엔터프라이즈
- 24 개의 프로세서-> 832 작업자 스레드
- 256GB 램
- 가용성 그룹 12 개 (전체)
- 642 데이터베이스 (전체)
따라서 문제가 발생한 서버의 구성은 다음과 같습니다.
- 5 개의 가용성 그룹 (3 차 / 2 차)
- 325 개 데이터베이스 (1 차 127 개 / 198 차)
MAXDOP = 8
Cost Threshold for Parallelism = 50
- 전원 관리 옵션이 "고성능"으로 설정되어 있습니다
문제를 "해결"하기 위해 하나의 가용성 그룹을 보조 서버로 수동으로 장애 조치했습니다. 해당 서버의 구성은 다음과 같습니다.
- 가용성 그룹 5 개 (2 차 / 2 차)
- 325 개의 데이터베이스 (77 차 / 248 차)
이 문장으로 사용 가능한 스레드를 모니터링하고 있습니다.
declare @max int
select @max = max_workers_count from sys.dm_os_sys_info
select
@max as 'TotalThreads',
sum(active_Workers_count) as 'CurrentThreads',
@max - sum(active_Workers_count) as 'AvailableThreads',
sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
sum(work_queue_count) as 'RequestWaitingForThreads' ,
sum(current_workers_count) as 'AssociatedWorkers'
from
sys.dm_os_Schedulers where status='VISIBLE ONLINE'
일반적으로 서버에는 약 250-430 개의 작업자 스레드가 있지만 문제가 시작될 때 남아있는 작업자는 없었습니다.
오늘날, 가용 한 노동자는 327 명에서 50 명으로 떨어졌지만, 1 분 밖에 걸리지 않고 다시 약 400 명으로 돌아갔다.
나는 이미 다른 질문 ( HADR 높은 작업자 스레드 사용 )을 보았지만 도움이되지 않습니다.
우리 시스템은 문제없이 1 년 이상 안정적으로 운영되었습니다. 데이터베이스 배포에 장애 조치 또는 기타 주요 변경 사항이 없었습니다.
복제본간에 "동기 커밋"을 사용하고 있습니다. 필자가 이해 한 압축은 없다는 것을 이해 하려면 설명서에서 가용성에 대한 압축 조정 그룹 을 참조하십시오 .
누구든지 모든 작업자 스레드를 사용하고 있다는 것을 알고 있습니까?
편집 :이 문제에 대해 정확하게 많은 정보가있는이 페이지를 발견했습니다 http://www.techdevops.com/Article.aspx?CID=24