2011. 7. 29. 18:25

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 옵션

max worker threads 옵션을 사용하여 MicrosoftSQL Server 프로세스에 사용할 수 있는 작업자 스레드 수를 구성할 수 있습니다. SQL Server는 Microsoft Windows 2000 및 Windows Server 2003 운영 체제의 네이티브 스레드 서비스를 사용하여 하나 이상의 스레드가 SQL Server에서 지원하는 각 네트워크를 동시에 지원하고 또 다른 스레드가 데이터베이스 검사점을 처리하고 스레드 풀이 모든 사용자를 처리하도록 합니다.

스레드 풀링을 사용하면 많은 클라이언트가 서버에 연결되어 있을 때 성능이 최적화됩니다. 보통 각 쿼리 요청마다 별도의 운영 체제 스레드가 생성됩니다. 그러나 서버에 대한 연결 수가 수백 개인 경우 쿼리 요청별로 스레드를 하나씩 사용하면 시스템 리소스를 상당히 많이 소비하게 될 수 있습니다. max worker threads 옵션을 사용하면 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가 다음에 사용할 수 있는 작업자 스레드가 요청을 처리할 수 있도록 작업자 스레드를 풀링합니다.

SQL Server 2000에서 max worker threads의 기본 설정은 255였습니다. SQL Server 2000데이터베이스 엔진 인스턴스를 최신 버전으로 업그레이드해도 max worker threads의 구성 값은 그대로 유지됩니다. 업그레이드 시 새 인스턴스 max worker threads 값을 0으로 변경하여 데이터베이스 엔진에서 최적 스레드 수를 계산할 수 있도록 하는 것이 좋습니다.

max worker threads는 고급 옵션입니다. sp_configure 시스템 저장 프로시저를 사용하여 설정을 변경하면 show advanced options를 1로 설정할 때만 max worker threads를 변경할 수 있습니다. 새 설정은 시스템을 다시 시작해야 적용됩니다.

참고참고

장기 실행 쿼리의 모든 작업자 스레드가 활성 상태이면 작업자 스레드가 완료되어 사용 가능 상태가 되기 전에는 SQL Server가 응답하지 않을 수 있습니다. 이는 오류는 아니지만 바람직한 상태는 아닙니다. 프로세스가 응답할 수 없고 새 쿼리를 처리할 수 없으면 DAC(관리자 전용 연결)를 사용하여 SQL Server에 연결한 다음 해당 프로세스를 중지합니다. 이를 방지하려면 max worker threads 수를 증가시킵니다.