SQL Server/SQL Server Tip

Max worker threads

SungWookKang 2015. 7. 17. 08:26
반응형

Max worker threads

 

보통 각 쿼리 요청마다 별도의 운영 체제 스레드가 생성된다. SQL Server는 Microsoft Windows 2000 및 Windows Server 2003 운영 체제의 네이티브 스레드 서비스를 사용하여 하나 이상의 스레드가 SQL Server에서 지원하는 각 네트워크를 동시에 지원하고 또 다른 스레드가 데이터베이스 검사점을 처리하고 스레드 풀이 모든 사용자를 처리하도록 한다.

실제 쿼리 요청 수가 max worker threads 값보다 적으면 각 쿼리 요청마다 스레드가 하나씩 사용 된다. 그러나 수백 개의 연결에 대하여 스레드를 하나씩 할당하게 되면 시스템 리소스를 상당히 많이 소비하게 된다. 이때 쿼리 요청 수가 max worker threads 값보다 많으면 SQL Server는 스레드 풀링을 통하여 최적화 시킨다.

기본 값인 0을 설정하면 SQL Server 시작 시 자동으로 스레드 수가 구성된다.

[기본값 구성시 설정되는 max 스레드 개수 공식]

32-bit

256 + (processors – 4) * 8

64-bit

(256 + (processors – 4) * 8) * 2

 

[CPU&SQL 버전에 따라 자동으로 구성되는 max worker threads 수]

Number of CPUs

32-bit

64-bit

<= 4 processors

256

512

8 processors

288

576

16 processors

352

704

32 processors

480

960

 

32bit SQL Server에는 최대 1024, 64bit SQL Server에는 최대 2048을 설정하는 것이 좋다.

 

SQL Server 2000의 max worker threads 는 255 이다. SQL Server 2000에서 업그레이드 한 경우 max worker threads 값을 0으로 변경하여 데이터베이스 엔진에서 최적의 스레드 수를 계산 할 수 있도록 하는 것이 좋다.

 

[SQL Server 버전에 따라 worker threads 1개가 필요로 하는 메모리]

SQL Server Platform

OS Platfrom

Stack Size

X86 (32-bit)

X86 (32-bit)

512K

X86 (32-bit) WoW

X64 (64-bit)

768KB

X64 (64-bit)

X64 (64-bit)

2048KB

IA64 (64-bit Itanium)

(64-bit Itanium)

4096KB

 

SQL Server는 max worker threads 옵션을 사용하여 스레드 수를 구성 할 수 있다.

--우선활성화좀하고...

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

GO

 

--max worker threads 설정좀 보자..

EXEC sp_configure 'max worker threads';

GO

 

 

--max 개수를1024로변경.

EXEC sp_configure 'max worker threads', 1024;

RECONFIGURE;

GO

 

 

--SQL Server 서비스재시작

 

--max worker threads 설정좀 보자..

EXEC sp_configure 'max worker threads';

GO

 

 

--다시비활성화.

EXEC sp_configure 'show advanced options', 0;

RECONFIGURE;

GO

 

현재 적용된 max worker threads 확인 하기.

--6core, 2CPU, Hyper Thread, x64, RAM 74G

SELECT

    MAX(SI.cpu_count) as logical_cpu_count,

    MAX(SI.scheduler_count) as scheduler_count,

    MAX(SI.max_workers_count) as max_workers_count,

    SUM(OS.current_workers_count) as current_workers_count,

    SUM(OS.active_workers_count) as active_workers_count

FROM sys.dm_os_sys_info SI, sys.dm_os_schedulers OS

GO

 

select (256 + (24-4)*8)*2

GO

 

 

Q1.현재 설정된 max worker thread 가 적당 한가?

Q2. Max worker thread 가 많으면 무조건 좋은가?

 

참고 사이트

http://msdn.microsoft.com/en-us/library/ms187024(v=sql.110).aspx

http://blogs.msdn.com/b/khen1234/archive/2005/11/07/489778.aspx

http://blogs.technet.com/b/askperf/archive/2007/05/18/sql-and-the-working-set.aspx

http://cafe.naver.com/sqlmvp/600

반응형