누가 내 작업자 스레드를 사용하고 있습니까? SQL Server 2014-HADR


10

최근 서버 중 하나에 작업자 스레드가 부족한 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 개의 작업자 스레드가 있지만 문제가 시작될 때 남아있는 작업자는 없었습니다.

사용 가능한 스레드 -119

오늘날, 가용 한 노동자는 327 명에서 50 명으로 떨어졌지만, 1 분 밖에 걸리지 않고 다시 약 400 명으로 돌아갔다.

나는 이미 다른 질문 ( HADR 높은 작업자 스레드 사용 )을 보았지만 도움이되지 않습니다.

우리 시스템은 문제없이 1 년 이상 안정적으로 운영되었습니다. 데이터베이스 배포에 장애 조치 또는 기타 주요 변경 사항이 없었습니다.

복제본간에 "동기 커밋"을 사용하고 있습니다. 필자가 이해 한 압축은 없다는 것을 이해 하려면 설명서에서 가용성에 대한 압축 조정 그룹 을 참조하십시오 .

누구든지 모든 작업자 스레드를 사용하고 있다는 것을 알고 있습니까?

편집 :이 문제에 대해 정확하게 많은 정보가있는이 페이지를 발견했습니다 http://www.techdevops.com/Article.aspx?CID=24

답변:


1

커뮤니티 위키 답변 :

가용성 그룹에 많은 수의 데이터베이스가 있으며 스레드가 갈 곳이 될 것입니다. 압축, 암호화 및 전송 비용에는 많은 것이 관련되어 있습니다. 압축을 해제하면 복제본 수에 따라 스레드 사용량이 약 3 분의 1로 줄어 듭니다.

질문에는 SQL Server 2014 태그가 지정되어 있으며 기본적으로 압축이 사용됩니다. SQL Server 2016은 기본적으로 동기화에 압축을 사용하지 않습니다.

인스턴스에서 작업자 스레드를 늘리거나 더 향상시켜야 할 수도 있습니다. 여러 서버에서 가장 활동적인 스레드와 비활성 스레드의 균형을 유지하십시오. 관련 Q & A AlwaysON 가용성 그룹 쿼리를 참조하십시오 .

요청을 제대로 닫을 수없는 응용 프로그램 일 수도 있습니다. 이로 인해 많은 수면 세션이 생길 수 있습니다 (근로자 소비).

실제로 사용되는 스레드 수는 데이터베이스의 활성 정도에 따라 다릅니다. 1,000 개의 데이터베이스를 보유 할 수 있으며 대부분 95 %의 유휴 시간이면 아무런 문제가 없습니다. 데이터베이스가 더 자주 활성화되고 더 많은 스레드를 섭취 한 것으로 보입니다. 그것은 길고 짧습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.