데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

CPU에 스레드 할당 및 lightweight pooling 옵션 사용

 

  • Version : SQL Server 2005, 2008, 2008R2

 

기본적으로 SQL Server 인스턴스마다 각 스레드를 시작한다. Affinity를 사용하는 경우에는 운영체제에서 각 스레드를 특정 CPU에 할당 한다. 운영체제에서는 여러 SQL Server 인스턴스의 스레드를 부하에 따라 컴퓨터의 CPU에 균일하게 분산한다.

 

사용량이 많은 CPU에서 다른 CPU로 스레드를 이동하는 경우도 있다. 반대로 SQL Server 데이터베이스 엔진은 스레드를 CPU에 균일하게 분산하는 스케줄러 작업자 스레드를 할당 한다.

 

Affinity mask 옵션은 ALTER SERVER CONFIGURATION을 사용하여 설정 한다. Affinity mask를 설정하지 않으면 SQL Server 인스턴스가 제외되지 않은 스케줄러에 균등하게 스케줄러를 할당 한다.

 

  • ALTER SERVER CONFIGURATION :

http://msdn.microsoft.com/ko-kr/library/ee210585(v=sql.105).aspx

 

[Affinity Mask 옵션 0]

디폴트 상태의 Affinity Mask 옵션 상태로 모든 CPU에 스레드를 할당 한다.

 

 

서버 속성에서 프로세서 탭에서 [모든 프로세서에 대해 자동으로 프로세서 선호도 마스크 설정]이 선택되어 있다.

 

 

서버에 CPU 사용률을 확인해 보면 모든 CPU에 스레드가 할당되어 사용되는 것을 확인 할 수 있다.

 

 

[Affinity Mask 옵션 1]

CPU 0번에 스레드가 할당 되도록 설정 하였다.

 

 

Sp_configure 에서도 configure_value의 값이 1로 변경된 것을 확인 할 수 있다.

 

0번 프로세서만 스레드가 할당되어 CPU를 사용하는 것을 확인 할 수 있다.

 

 

[Affinity Mask 옵션 2]

CPU 1번에 스레드가 할당되도록 설정을 변경 하였다.

 

 

Sp_configure 에서도 configure_value의 값이 2로 변경된 것을 확인 할 수 있다.

 

 

1번 프로세서만 스레드가 할당되어 CPU를 사용하는 것을 확인 할 수 있다.

 

 

 

Lightweight pooling(경량 풀링) 옵션을 사용하여 대칭적 다중 프로세싱(SMP)환경에서 가끔 나타나는 과도한 컨텍스트 스위치의 오버헤드를 줄일 수 있다. 과도한 컨텍스트 스위치가 일어나면 lightweight pooling이 컨텍스트 전환을 인라인으로 수행하여 사용자/커널 링 전환을 줄임으로써 처리량을 향상 시킬 수 있다.

 

 

파이버 모드는 UMS작업자의 컨텍스트 전환으로 인해 심각한 성능 병목 상태가 발생하는 특정한 상황을 위한 것이다. 이런 경우는 드물기 때문에 파이버 모드가 일반 시스템의 성능이나 확장성을 향상시키는 경우가 거의 없다.

 

일상 작업을 예약하는 데에는 파이버 모드를 사용하지 않는 것이 좋다. 파이버 모드를 사용하면 컨텍스트 스위치를 활용하지 못해 성능이 저하될 수 있으며 TLS(스레드 로컬 저장소)또는 스레드 소유 개체(뮤텍스 등)를 사용하는 SQL Server의 일부 구성 요소가 파이버 모드에서 제대로 작동하지 않을 수 있다.

 

Lightweight pooling 의 기본값은 0이며 1로 변경할 경우 파이버 모드 일정으로 전환 된다. 경량풀링에서는 CLR 실행이 지원되지 않는다. "clr enabled"또는 "lightweight pooling" 옵션 중 하나를 해제 해야 한다. CLR에 의존하며 파이버 모드에서 제대로 작동하지 않는 기능에는 hierarchy 데이터 형식, 복제, 정책 기반 관리 등이 있다.

Lightweight pooling의 설정을 변경할 경우 서버를 재시작 하여 적용해야 한다.

 

 

[참고자료]

CPU에 스레드 할당 : http://msdn.microsoft.com/ko-kr/library/ms189059(v=sql.105).aspx

Lightweight pooling 옵션 : http://msdn.microsoft.com/ko-kr/library/ms178074(v=sql.105).aspx

 

 


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1810 DMV를 이용한 CPU 사용량 높은 쿼리 찾기 jevida(강성욱) 2016.09.29 4393
1809 DMV를 이용한 인덱스 크기 및 조각화 정보 반환 jevida(강성욱) 2016.09.29 1156
1808 Checkpoint 추적하기 jevida(강성욱) 2016.09.29 1285
1807 중복 인덱스와 성능(Duplicate Indexes with Performance) jevida(강성욱) 2016.09.29 2229
1806 823, 824, 825, 832 오류 (DISK IO 오류) jevida(강성욱) 2016.09.29 2135
1805 DISK I/O 병목 확인 jevida(강성욱) 2016.09.29 3716
1804 SQL Server 2012에서 비상계정 생성하기 - 비밀번호를 잊어 버렸을 경우 대처하기 jevida(강성욱) 2016.09.29 1251
1803 SQL Server 차단 최소화 jevida(강성욱) 2016.09.29 1129
1802 자주 사용되는 System 함수 jevida(강성욱) 2016.09.29 1070
1801 프로시저와 임시테이블, 그리고 리컴파일 jevida(강성욱) 2016.09.29 2393
1800 access check cache 크기에 따른 성능 문제 jevida(강성욱) 2016.09.29 1049
1799 Hot Add CPU jevida(강성욱) 2016.09.29 849
1798 스레드 및 파이버 실행 jevida(강성욱) 2016.09.29 999
» CPU에 스레드 할당 및 lightweight pooling 옵션 사용 jevida(강성욱) 2016.09.29 1690
1796 스레드 및 태스크 아키텍처 jevida(강성욱) 2016.09.29 1391
1795 메모리 관리 아키텍처 – NUMA 버퍼 풀 증가 및 축소 jevida(강성욱) 2016.09.29 1231
1794 메모리 관리 아키텍처 – NUMA 지원 방법 jevida(강성욱) 2016.09.29 1545
1793 메모리 관리 아키텍처 – NUMA(Non-Uniform Memory Access)이해 jevida(강성욱) 2016.09.29 1415
1792 메모리 관리 아키텍처 – Hot Add 메모리 jevida(강성욱) 2016.09.28 929
1791 메모리 관리 아키텍처 – 버퍼 관리_페이지 쓰기 jevida(강성욱) 2016.09.28 1053





XE Login

테스트 팝업
Close