연구개발/SQL2005

[SQL2005 Guide] SQL Server 구성 옵션 - max worker threads

알 수 없는 사용자 2009. 6. 18. 20:23
반응형

‘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 개수

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)의 적용을 고려해 볼 수 있습니다.

 

반응형