Max worker Threads
* 해당 페이지는 sqler.com 과 Microsoft TechNet 의 자료를 인용하여 구성되어 있습니다.
‘max worker threads’ 옵션은 Microsoft SQL Server 프로세스에 사용할 수 있는 작업자 스레드의 수를 구성하는 옵션
입니다.
스레드 풀링을 사용하면 많은 클라이언트가 서버에 연결되어 있을 때 성능이 최적화됩니다. 보통 각각의 클라이언트
연결에 대하여 별도의 운영 체제 스레드가 만들어집니다. 그러나 서버에 대하여 수백 개의 연결이 있는 경우에 연결별
로 스레드를 하나씩 사용하면 시스템 리소스를 상당히 많이 소비하게 될 수 있습니다. max worker threads 옵션을 사
용하면 SQL Server 에서 작업자 스레드 풀을 만들어 많은 클라이언트 연결을 처리하므로 성능이 향상됩니다.
실제 사용자 연결 수가 max worker threads에 설정된 값보다 적으면 각 연결마다 스레드 하나가 사용됩니다. 그러나
실제 연결 수가 max worker threads에 설정된 값보다 많아지면 SQL Server 가 다음 사용할 수 있는 작업자 스레드가
요청을 처리할 수 있도록 작업자 스레드를 풀링합니다.
max worker threads의 기본값은 0 입니다. 기본값인 0을 사용하면 SQL Server 시작 시 작업자 스레드 수가 자동으로
구성됩니다. 이 설정은 대부분의 시스템에서 가장 적합하지만 시스템 구성에 따라 max worker threads를 특정 값으
로 설정함으로써 성능이 향상되는 경우가 있습니다.
Max Worker Threads 기본 값:
CPU Core 수 | 32-bit | 64-bit
<= 4 256 512
8 288 576
16 352 704
32 480 960
권고사항:
- 32비트 시스템의 경우에는 1024를 초과하지 않는 것을 권고합니다.
- 대용량 64비트의 경우에는 2048 또는 그 이상의 값을 설정할 수도 있습니다.
max worker threads는 고급 옵션입니다. sp_configure 시스템 저장 프로시저를 사용하여 설정을 변경하는 경우 max
worker threads는 show advanced options가 1로 설정된 경우에만 변경할 수 있으며, 새 설정값은 시스템을 다시 시
작해야 적용됩니다.
오래 실행되는 쿼리의 모든 작업자 스레드가 활성 상태이면 작업자 스레드가 완료되어 사용 가능 상태가 되기 전에는
SQL Server 가 응답하지 않을 수 있습니다. 프로세스가 응답할 수 없고 새 쿼리를 처리할 수 없는 경우에는 DAC(관리
자 전용 연결)를 사용하여 SQL Server 에 연결한 다음 해당 프로세스를 중지합니다. DAC는 작업자 스레드(worker
thread)를 완전히 다 써버린 경우에도 SQL Server에 액세스 가능합니다. ‘max worker threads’ 값을 증가시키면 작업
자 스레드가 없어서 응답하지 못하는 문제가 개선되지만, ‘max worker threads’의 값을 늘리면 메모리 사용이 증가하
므로 무조건 ‘max worker threads’ 값을 증가시키는 것은 바람직하지 않습니다.
실제로 ‘max worker threads’의 값을 증가시켜 줄 필요가 있는 경우도 있지만, 심각한 블로킹으로 인하여 스레드가 부
족한 경우도 있습니다. 블로킹당한 스레드는 작업자 스레드를 잡고 있기 때문에 심각한 블로킹 현상이 발생하면 작업
자 스레드가 부족하게 될 수 있습니다. 그러므로 작업자 스레드가 부족한 문제가 발생하면 블로킹이 발생하고 있지 않
는지 확인해 보시기 바랍니다. 만일 블로킹이 발생하고 있다면 트랜잭션을 개선하거나 성능을 튜닝하거나 트랜잭션
격리 수준을 낮추거나 또는 SQL Server 2005에서 새롭게 지원되는 read committed snapshot isolation(RCSI)의 적용
을 고려해 볼 수 있습니다.
----------------------------------------------------------------------------------------------------------
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'max worker threads';
GO
EXEC sp_configure 'max worker threads', 1024;
RECONFIGURE;
GO
GO
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
max worker threads 옵션을 사용하여 MicrosoftSQL Server 프로세스에 사용할 수 있는 작업자 스레드 수를 구성할 수 있습니다. SQL Server는 Microsoft Windows 2000 및 Windows Server 2003 운영 체제의 네이티브 스레드 서비스를 사용하여 하나 이상의 스레드가 SQL Server에서 지원하는 각 네트워크를 동시에 지원하고 또 다른 스레드가 데이터베이스 검사점을 처리하고 스레드 풀이 모든 사용자를 처리하도록 합니다.
max worker threads의 기본값인 0을 사용하면 SQL Server 시작 시 작업자 스레드 수가 자동으로 구성됩니다. 이 설정은 대부분의 시스템에 가장 적합하지만 시스템 구성에 따라 max worker threads를 특정 값으로 설정하는 것이 성능 향상에 도움이 될 수도 있습니다.
다음 표에서는 다양한 CPU 조합과 SQL Server 버전에 대해 자동으로 구성되는 max worker threads 수를 보여 줍니다.
CPU 수 |
32비트 컴퓨터 |
64비트 컴퓨터 |
---|---|---|
<= 4개의 프로세서 |
256 |
512 |
8개의 프로세서 |
288 |
576 |
16개의 프로세서 |
352 |
704 |
32개의 프로세서 |
480 |
960 |
주의 |
---|
32비트 SQL Server에는 최대 1024를 설정하는 것이 좋습니다. |
실제 쿼리 요청 수가 max worker threads에 설정된 값보다 적으면 각 쿼리 요청마다 스레드 하나가 사용됩니다. 그러나 실제 쿼리 요청 수가 max worker threads에 설정된 값보다 많아지면 SQL Server가 다음에 사용할 수 있는 작업자 스레드가 요청을 처리할 수 있도록 작업자 스레드를 풀링합니다.
max worker threads는 고급 옵션입니다. sp_configure 시스템 저장 프로시저를 사용하여 설정을 변경하면 show advanced options를 1로 설정할 때만 max worker threads를 변경할 수 있습니다. 새 설정은 시스템을 다시 시작해야 적용됩니다.
참고 |
---|
장기 실행 쿼리의 모든 작업자 스레드가 활성 상태이면 작업자 스레드가 완료되어 사용 가능 상태가 되기 전에는 SQL Server가 응답하지 않을 수 있습니다. 이는 오류는 아니지만 바람직한 상태는 아닙니다. 프로세스가 응답할 수 없고 새 쿼리를 처리할 수 없으면 DAC(관리자 전용 연결)를 사용하여 SQL Server에 연결한 다음 해당 프로세스를 중지합니다. 이를 방지하려면 max worker threads 수를 증가시킵니다. |