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

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

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
1830 SQL Server 2012 Sp1 설치 이슈 및 해결 jevida(강성욱) 2016.09.30 1578
1829 SSD에서 DBCC CHECKDB 성능 벤치마킹 jevida(강성욱) 2016.09.30 1932
1828 Collation에 따른 ALTER DATABASE 실패 jevida(강성욱) 2016.09.30 1942
1827 LDF 파일이 잘리지 않는 이유 jevida(강성욱) 2016.09.30 2054
1826 Tempdb 경합 확인 및 해결 (Tempdb Contention) jevida(강성욱) 2016.09.30 2220
1825 SQL Server IO 병목 확인과 오해 jevida(강성욱) 2016.09.30 2502
1824 SQL Version에 따른 sp_prepare 정보 반환 jevida(강성욱) 2016.09.30 1716
1823 DReplay 활성 세션 초과 에러 jevida(강성욱) 2016.09.30 1542
1822 저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일 jevida(강성욱) 2016.09.30 1870
» NUMA 노드와 추척플래그 8048 jevida(강성욱) 2016.09.30 820
1820 온라인 인덱스 리빌드와 조각화 증가 jevida(강성욱) 2016.09.30 1608
1819 VARCHAR(MAX) and NTEXT 쿼리 성능 jevida(강성욱) 2016.09.30 4476
1818 CPU 리소스 상태에 따른 병렬 처리 제한 jevida(강성욱) 2016.09.30 1077
1817 매개변수 값의 변경과 SQL 서버 성능 저하 jevida(강성욱) 2016.09.30 1271
1816 IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 jevida(강성욱) 2016.09.30 1060
1815 SQL 버전과 CLR (.NET Framework 버전에 따른 오류) jevida(강성욱) 2016.09.30 1189
1814 SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기 jevida(강성욱) 2016.09.30 1327
1813 테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 jevida(강성욱) 2016.09.30 1233
1812 디스크 섹터 크기와 데이터베이스 성능 jevida(강성욱) 2016.09.29 1636
1811 CLR 사용시 CPU 사용률 증가 현상 jevida(강성욱) 2016.09.29 1761





XE Login