NUMA 노드와 추척플래그 8048

 

  • Version : SQL Server 2008, 2008R2, 2012

 

SQL Server 2008 이상의 NUMA NODE 환경에서 노드당 CPU가 8개 이상 사용되는 서버에서 추적 플래그 8048이 필요한 경우를 살펴보자

 

이번 포스트는 CSS SQL Server Engineer 팀블로그에 게제된 내용으로 필자가 이해한 내용을 바탕으로 정리 하였으며 번역의 오류나 기술적 오류가 있음을 인지 한다.

 

SQL Server 개발자는 메모리 사용에 따라 서로 다른 수준의 파티션 메모리를 할당하도록 선택 할 수 있다. 개발자는 글로벌, CPU, NODE, 작업 파티션 스키마를 선택 할 수 있다.

 

SQL Server에서는 CMemPartitioned 할당을 사용한다. 이 파티션의 CPU 또는 NUMA 노드 메모리는 동시성과 성능이 향상 된다.

 

CMemPartitioned는 일반적인 힙(heap)과 개념이 비슷하다.(하지만 HeapCreate와는 다르다). 힙을 만들고 동기화 할 때 기본 크기 및 기타 속성을 평가 한다. SQL Server 개발자는 메모리 개체를 만들 때 스레드의 안전한 액세스, 파티션 구성 표 및 기타 옵션 같은 것들을 나타낸다.

 

 

개발자가 객체를 만들면 새로운 할당 동작이 발생 한다. 왼쪽 요청은 노드 기반의 메모리 개체에 대한 작업이다. 이 개체의 동기화는 (일반적으로 CMEMTHREAD 또는 SOS_SUSPEND_QUEUE 타입) 할당된 NUMA 노드 작업의 노드 레벨에서 할당된 로컬 메모리를 사용한다.

오른쪽은 CPU 기반의 메모리 개체에 할당 한다. 이 개체의 동기화는 할당된 CPU 작업의 CPU레벨에서 할당된 로컬 메모리를 사용한다.

 

대부분의 CPU 기반의 디자인의 경우 SQL OS 논리적 스케줄링을 처리하는 방식으로 동기화 충돌을 최대한 줄일 수 있다. 선점(preemptive)과 백그라운드 작업은 충돌이 가능하지만 가능한 CPU 레벨에서 빈도를 최대한 낮춘다. 그러나 CPU 기반의 파티션은 개별 CPU 액세스 경로와 관련 메모리 목록을 유지하기 위해 더 많은 오버헤드를 발생 시킨다.

 

노드 기반 디자인 경우 노드에 대한 오버헤드를 줄일 수 있지만 충돌 가능성이 약간 증가 한다. 매우 구체적인 시나리오에서는 최고의 성능 결과에 영향을 준다.

 

다음과 같이 멀티 코어 CPU 환경에서 단일 NUMA 노드 내에 8개 이상의 CPU를 사용할 때 Microsoft는 노드 당 8개의 CPU 접근을 초과할 경우 할 경우 노드 기반의 파티셔닝은 특정 쿼리 패턴에서 확장하지 않음을 관찰 했다. 그러나 추적플래그 8408을 사용하면 모든 NODE 기반의 파티션을 CPU기반 파티션으로 업그레이드 된다. 이 방법은 메모리 오버헤드를 증가시키지만 시스템에서 성능 향상을 제공한다.

 

추적플래그 8408의 필요성 판단은 어떻게 할까?

마이크로소프트의 CSS에서는 DMV의 dm_os_wait_stats 및 dm_os_spin_stats(CMEMTHREAD 및 SOS_SUSPEND_QUEUE)으로 매우 큰 수의 스핀 점프 핫 스팟을 확인 한다.

 

[참고자료]

http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus-presented-per-numa-node-may-need-trace-flag-8048.aspx

 

 


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

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1264
1826 Tempdb 경합 확인 및 해결 (Tempdb Contention) jevida(강성욱) 2016.09.30 2268
1825 SQL Server IO 병목 확인과 오해 jevida(강성욱) 2016.09.30 2581
1824 SQL Version에 따른 sp_prepare 정보 반환 jevida(강성욱) 2016.09.30 1755
1823 DReplay 활성 세션 초과 에러 jevida(강성욱) 2016.09.30 1580
1822 저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일 jevida(강성욱) 2016.09.30 1956
» NUMA 노드와 추척플래그 8048 jevida(강성욱) 2016.09.30 856
1820 온라인 인덱스 리빌드와 조각화 증가 jevida(강성욱) 2016.09.30 1654
1819 VARCHAR(MAX) and NTEXT 쿼리 성능 jevida(강성욱) 2016.09.30 5212
1818 CPU 리소스 상태에 따른 병렬 처리 제한 jevida(강성욱) 2016.09.30 1126
1817 매개변수 값의 변경과 SQL 서버 성능 저하 jevida(강성욱) 2016.09.30 1315
1816 IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 jevida(강성욱) 2016.09.30 1083
1815 SQL 버전과 CLR (.NET Framework 버전에 따른 오류) jevida(강성욱) 2016.09.30 1234
1814 SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기 jevida(강성욱) 2016.09.30 1375
1813 테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 jevida(강성욱) 2016.09.30 1289
1812 디스크 섹터 크기와 데이터베이스 성능 jevida(강성욱) 2016.09.29 1678
1811 CLR 사용시 CPU 사용률 증가 현상 jevida(강성욱) 2016.09.29 1816
1810 DMV를 이용한 CPU 사용량 높은 쿼리 찾기 jevida(강성욱) 2016.09.29 4747
1809 DMV를 이용한 인덱스 크기 및 조각화 정보 반환 jevida(강성욱) 2016.09.29 1196
1808 Checkpoint 추적하기 jevida(강성욱) 2016.09.29 1327
1807 중복 인덱스와 성능(Duplicate Indexes with Performance) jevida(강성욱) 2016.09.29 2384





XE Login