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
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38110
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20672
1814 SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기 jevida(강성욱) 2016.09.30 1429
1813 테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 jevida(강성욱) 2016.09.30 1323
1812 디스크 섹터 크기와 데이터베이스 성능 jevida(강성욱) 2016.09.29 1732
1811 CLR 사용시 CPU 사용률 증가 현상 jevida(강성욱) 2016.09.29 1863
1810 DMV를 이용한 CPU 사용량 높은 쿼리 찾기 jevida(강성욱) 2016.09.29 4797
1809 DMV를 이용한 인덱스 크기 및 조각화 정보 반환 jevida(강성욱) 2016.09.29 1223
1808 Checkpoint 추적하기 jevida(강성욱) 2016.09.29 1353
1807 중복 인덱스와 성능(Duplicate Indexes with Performance) jevida(강성욱) 2016.09.29 2456
1806 823, 824, 825, 832 오류 (DISK IO 오류) jevida(강성욱) 2016.09.29 2281
1805 DISK I/O 병목 확인 jevida(강성욱) 2016.09.29 4417
1804 SQL Server 2012에서 비상계정 생성하기 - 비밀번호를 잊어 버렸을 경우 대처하기 jevida(강성욱) 2016.09.29 1538
1803 SQL Server 차단 최소화 jevida(강성욱) 2016.09.29 1213
1802 자주 사용되는 System 함수 jevida(강성욱) 2016.09.29 1115
1801 프로시저와 임시테이블, 그리고 리컴파일 jevida(강성욱) 2016.09.29 2547
1800 access check cache 크기에 따른 성능 문제 jevida(강성욱) 2016.09.29 1158
1799 Hot Add CPU jevida(강성욱) 2016.09.29 911
1798 스레드 및 파이버 실행 jevida(강성욱) 2016.09.29 1107
» CPU에 스레드 할당 및 lightweight pooling 옵션 사용 jevida(강성욱) 2016.09.29 1833
1796 스레드 및 태스크 아키텍처 jevida(강성욱) 2016.09.29 1512
1795 메모리 관리 아키텍처 – NUMA 버퍼 풀 증가 및 축소 jevida(강성욱) 2016.09.29 1290





XE Login