서버 구성: 최대 작업자 스레드
적용 대상: SQL Server
이 문서에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 서버 구성 옵션을 구성하는 max worker threads
방법을 설명합니다. 이 max worker threads
옵션은 쿼리 요청, 로그인, 로그아웃 및 유사한 애플리케이션 요청을 처리하기 위해 SQL Server 전체에서 사용할 수 있는 작업자 스레드 수를 구성합니다.
SQL Server는 운영 체제의 네이티브 스레드 서비스를 사용하여 다음 조건을 확인합니다.
- 하나 이상의 스레드가 SQL Server에서 지원하는 각 네트워크를 동시에 지원합니다.
- 하나의 스레드가 데이터베이스 검사점을 처리합니다.
- 단일 스레드 풀에서 모든 사용자를 처리합니다.
max worker threads
의 기본값은 0입니다. 0으로 설정하면 SQL Server가 시작 시 작업자 스레드 수를 자동으로 구성합니다. 대부분의 시스템에는 기본 설정을 사용하는 것이 최상의 방법입니다. 그러나 시스템 구성에 따라 특정 값으로 설정 max worker threads
하면 성능이 향상되는 경우가 있습니다.
제한 사항
쿼리 요청의 실제 수는 설정된 값을 max worker threads
초과할 수 있습니다. 이 경우 SQL Server는 다음 사용 가능한 작업자 스레드가 요청을 처리할 수 있도록 작업자 스레드를 풀합니다. 작업자 스레드는 활성 요청에만 할당되며 요청이 처리되면 해제됩니다. 이 현상은 요청이 이루어진 사용자 세션/연결이 계속 열려 있는 경우에도 발생합니다.
max worker threads
서버 구성 옵션이 엔진 내에서 생성될 수 있는 모든 스레드를 제한하지는 않습니다. LazyWriter, 검사점, 로그 작성기, Service Broker, 잠금 관리자 등의 작업에 필요한 시스템 스레드는 이 한도를 벗어나 생성됩니다. 가용성 그룹은 내부에서 max worker thread limit
일부 작업자 스레드를 사용하지만 시스템 스레드도 사용합니다(가용성 그룹별 스레드 사용량 참조). 구성된 스레드 수를 초과하는 경우 다음 쿼리는 추가 스레드를 생성한 시스템 작업에 대한 정보를 제공합니다.
SELECT s.session_id,
r.command,
r.status,
r.wait_type,
r.scheduler_id,
w.worker_address,
w.is_preemptive,
w.state,
t.task_state,
t.session_id,
t.exec_context_id,
t.request_id
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
INNER JOIN sys.dm_os_tasks AS t
ON r.task_address = t.task_address
INNER JOIN sys.dm_os_workers AS w
ON t.worker_address = w.worker_address
WHERE s.is_user_process = 0;
권장 사항
이 옵션은 고급 옵션으로, 숙련된 데이터베이스 관리자나 공인된 SQL Server 전문가만이 변경해야 합니다. 성능 문제가 있다고 의심되는 경우 작업자 스레드의 가용성이 아닐 수 있습니다. 작업자 스레드를 차지하고 해제하지 않는 작업이 원인일 가능성이 높습니다. 장기 실행 쿼리 또는 시스템의 병목 상태(I/O, 차단, 래치 대기, 네트워크 대기)를 예로 들 수 있습니다. 최대 작업자 스레드 설정을 변경하기 전에 성능 문제의 근본 원인을 찾는 것이 가장 좋습니다. 성능 평가에 대한 자세한 내용은 성능 모니터링 및 조정을 참조 하세요.
스레드 풀링을 사용하면 많은 수의 클라이언트가 서버에 연결할 경우 성능을 최적화할 수 있습니다. 일반적으로 각각의 쿼리 요청마다 별도의 운영 체제 스레드가 만들어집니다. 하지만 서버에 대한 수백 개의 연결에서 쿼리 요청마다 하나씩 스레드를 사용하면 많은 양의 시스템 리소스가 소모될 수 있습니다. 이 max worker threads
옵션을 사용하면 SQL Server에서 더 많은 수의 쿼리 요청을 서비스하는 작업자 스레드 풀을 만들어 성능을 향상시킬 수 있습니다.
다음 표에서는 *기본 최대 작업자 + ((논리 CPU - 4) * CPU당 작업자)와 같은 수식을 사용하여 논리 CPU, 컴퓨터 아키텍처 및 SQL Server 버전의 다양한 조합에 대해 자동으로 구성된 최대 작업자 스레드 수(값이 0으로 설정된 경우)를 보여 줍니다.
논리 CPU 수 | 32비트 컴퓨터(SQL Server 2014(12.x)까지) | 64비트 컴퓨터(SQL Server 2016(13.x) SP1까지) | 64비트 컴퓨터(SQL Server 2016(13.x) SP2 및 SQL Server 2017(14.x)부터) |
---|---|---|---|
< = 4 | 256 | 512 | 512 |
8 | 288 | 576 | 576 |
16 | 352 | 704 | 704 |
32 | 480 | 960 | 960 |
64 | 736 | 1472 | 1472 |
128 | 12:48 | 24% | 4480 |
256 | 2272 | 4544 | 8576 |
SQL Server 2016(13.x) 서비스 팩 1까지 CPU당 작업자는 아키텍처(32비트 또는 64비트)에 따라서만 결정됩니다.
논리 CPU 수 | 32비트 컴퓨터 1 | 64비트 컴퓨터 |
---|---|---|
< = 4 | 256 | 512 |
> 4 | 256 + ((논리 CPU 수 - 4) * 8) | 512 2 + ((논리 CPU 수 - 4) * 16) |
SQL Server 2016(13.x) SP2 및 SQL Server 2017(14.x)부터 CPU당 작업자는 아키텍처 및 프로세서 수(4개~64개 또는 64개 초과)에 따라 달라집니다.
논리 CPU 수 | 32비트 컴퓨터 1 | 64비트 컴퓨터 |
---|---|---|
< = 4 | 256 | 512 |
> 4 및 <= 64 | 256 + ((논리 CPU 수 - 4) * 8) | 512 2 + ((논리 CPU 수 - 4) * 16) |
> 64 | 256 + ((논리 CPU 수 - 4) * 32) | 512 2 + ((논리 CPU 수 - 4) * 32) |
1 SQL Server 2016(13.x)부터는 더 이상 32비트 운영 체제에 SQL Server를 설치할 수 없습니다. 32비트 컴퓨터 값은 SQL Server 2014(12.x) 이하 버전을 실행하는 고객을 지원하기 위해 나열되었습니다. 32비트 컴퓨터에서 실행 중인 SQL Server 인스턴스의 최대 작업자 스레드 수는 1,024로 설정하는 것이 좋습니다.
2 SQL Server 2017(14.x)부터 2GB 미만의 메모리를 사용하는 컴퓨터에 대해 기본 최대 작업자 값이 2로 나뉩니다.
팁
64개가 넘는 논리 CPU 사용에 대한 자세한 내용은 64개를 초과하는 CPU가 있는 컴퓨터에서 SQL Server를 실행하기 위한 최선의 방법을 참조하세요.
장기 실행 쿼리로 인해 모든 작업자 스레드가 활성화된 경우, 작업자 스레드가 완료되고 사용 가능해질 때까지 SQL Server가 응답하지 않는 것처럼 보일 수 있습니다. 이 동작은 결함이 아니지만 때로는 바람직하지 않을 수 있습니다. 프로세스가 응답하지 않는 것처럼 보이고 새 쿼리를 처리할 수 없는 경우, DAC(관리자 전용 연결)를 사용하여 SQL Server에 연결하고 프로세스를 종료하세요. 이를 방지하려면 max worker threads 수를 증가시킵니다.
사용 권한
매개 변수 없이 또는 첫 번째 매개 변수만 사용하여 sp_configure
를 실행할 수 있는 권한은 기본적으로 모든 사용자에게 부여됩니다. 구성 옵션을 변경하거나 RECONFIGURE
문을 실행하는 두 매개 변수를 사용하여 sp_configure
를 실행하려면 사용자에게 ALTER SETTINGS
서버 수준 권한이 있어야 합니다. ALTER SETTINGS
권한은 sysadmin 및 serveradmin 고정 서버 역할에 의해 암시적으로 보유됩니다.
SSMS(SQL Server Management Studio) 사용
개체 탐색기에서 서버를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
프로세서 노드를 선택합니다.
최대 작업자 스레드 상자에 128~65,535의 값을 입력하거나 선택합니다.
팁
이 max worker threads
옵션을 사용하여 SQL Server 프로세스에 사용할 수 있는 작업자 스레드 수를 구성합니다. 기본 설정 max worker threads
은 대부분의 시스템에 가장 적합합니다.
그러나 시스템 구성에 따라 더 작은 값으로 설정 max worker threads
하면 성능이 향상되는 경우가 있습니다.
자세한 내용은 이 문서의 권장 사항 섹션을 참조하세요.
Transact-SQL 사용
데이터베이스 엔진에 연결합니다.
표준 도구 모음에서 새 쿼리를 선택합니다.
다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 sp_configure 를 사용하여
max worker threads
옵션을900
으로 구성하는 방법을 보여 줍니다.USE master; GO EXECUTE sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXECUTE sp_configure 'max worker threads', 900; GO RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; GO RECONFIGURE; GO
변경 내용은 데이터베이스 엔진을 다시 시작할 필요 없이 RECONFIGURE를 실행한 직후에 적용됩니다.