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

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

SQL Server 논리  물리 프로세서를 결정하는 방법

 

Version : SQL Server

 

SQL Server  하드웨어 레이아웃 정보를 바탕으로 NUMA 노드를 구성한다. SQL Server 2016 부터는 레이아웃 정보를 바탕으로 자동으로 NUMA 노드를 구성을 한다.

·         SQL Server 2016 Automatic Soft NUMA : http://sqlmvp.kr/220806805474

그렇다면 SQL Server Native(bare metal) 또는 VM 환경과 같이 가상화 환경에서 구성된다면 어떻게 노드를구성할까 과정의 핵심은getlogicalprocessorinformation (windows API)  API이며 논리적으로는 bare metal VM 기반이 동일하다.  VM(Virtual Machine) 설치하는경우 지원 기능에 대해서는 벤더의 정보를 참고할  있도록 한다. SQL Server Windows API 사용하여 프로세서와 패키지간의 상호 작용을 결정한다.

·         GetSystemInfo https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.85).aspx

·         GetLogicalProcessorInformation https://msdn.microsoft.com/en-us/library/windows/desktop/ms683194(v=vs.85).aspx

 

GetLogicalProcessorInformation API  RelationProcessorCore  RelationProcessorPackage 정보를 검색   있다반환된 정보를 사용하여 SQL Server 그에 따라 노드와 스케줄러를 할당 한다예를들면  SQL Server 2016에서 자동으로 NUMA 노드가 구성될  같은 패키지의 논리 프로세서가 동일한 소프트NUMA 노드가할당되는 것을 방지 한다.

 

아래 경우 다양한 시스템 정보에서 코어  패키지가 어떻게 표현되는지   있다아래 샘플 결과는 8 processor system 이며 싱글 CPU, 4Core system, HT enabled 상태이다.

Readtrace 또는 ostress 에서 GetLogicalProcessorInformation API 사용하여 프로세서 관계를 출력

Active proc mask(0): 0x000000FF

        Architecture: 9

           Page size: 4096

                CPUs: 8

    Processor groups: 1

        Highest node: 0

  Proximity: 00  Node: 00

—————————————

               Group: 0

—————————————

        Processor(s): 0x00000003 Function units: Shared    <— 이진 값을 변경하면 논리당 2개의프로세서를 나타냄

        Processor(s): 0x0000000C Function units: Shared    <— 프로세서는 RelationProcessorCore  나타냄

        Processor(s): 0x00000030 Function units: Shared

        Processor(s): 0x000000C0 Function units: Shared

        Package mask: 0x000000FF    <— 패키지는 RelationProcessorPackage 나타냄

        Processor(s): 0x000000FF assigned to Numa node: 0

 

 

MSINFO32 결과

Processor    Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz, 2801 Mhz, 4 Core(s), 8 Logical Processor(s)

 

SQL Error Log

SQL Server detected 1 sockets with 4 cores per socket and 8 logical processors per socket, 8 total logical processors; using 8 logical processors based on SQL Server licensing. This is an informational message; no user action is required.

 

Hyper-V VM에서 동일하게4 프로세서 할당하였을때 결과이다 구성에서 프로세서는 단일 CPU, 4코어 , 코어당 단일 CPU 시스템으로 표시된다.

 

Active proc mask(0): 0x0000000F

        Architecture: 9

           Page size: 4096

                CPUs: 4

    Processor groups: 1

        Highest node: 0

  Proximity: 00  Node: 00

—————————————

               Group: 0

—————————————

        Processor(s): 0x00000001 Function units: Separated

        Processor(s): 0x00000002 Function units: Separated

        Processor(s): 0x00000004 Function units: Separated

        Processor(s): 0x00000008 Function units: Separated

        Package mask: 0x0000000F

        Processor(s): 0x0000000F assigned to Numa node: 0

 

MSINFO32

Processor    Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz, 2794 Mhz, 4 Core(s), 4 Logical Processor(s)

 

API 시스템이 단일 CPIU 패키지의 4CPU 시스템임을 SQL Server에게 알린다프로세서를 별도로 보고함으로써 SQL Server 스케줄러와 노드 할당을 결정할  프로세서를 별도로 처리한다.

Bare metal 단일 CPU, 4코어, HT 지원하므로 4개의 CPU 실제로 어떻게 매핑 될까기본적으로 Hyper-V  경우 프로세서는 논리적(floating) 엔티티이다최적화가 진행되는 동안 VM 노출된 프로세서는 필요에 따라이동하여 VM CPU 사이클을 제공할  있다.

Hard Affinity 경우 NUMA 스패닝과 같은 추가 옵션이 VM 솔루션에서 지원되거나 지원되지 않을 수있다. SQL Server스케줄러 레이아웃(Error log or DMV) 추가 옵션을 검토하여 VM  bare metal 구성에서 레이아웃 최적화를 최적화하는데 필요할  있다.  

 


 

 

[참고자료]

https://blogs.msdn.microsoft.com/bobsql/2016/06/09/how-it-works-how-sql-server-determines-logical-and-physical-processors/

https://en.wikipedia.org/wiki/Bare_machine

 

 



 

SQL Server, Hyper-V, VM, Virtual Machine, Processor, Bare Metal, GetLogicalProcessorInformation, CPU, Hyperthread, MS SQL,




강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
2090 SQL Server DBA 체크리스트 jevida(강성욱) 2017.05.31 6892
2089 SQL Server 데이터베이스 백업이 성공적인지 확인하는 방법 jevida(강성욱) 2017.05.31 3736
2088 트리거가 적용된 메모리 최적화 테이블에서 alter table 실패 jevida(강성욱) 2017.05.31 3251
2087 메모리 최적화 테이블 변수 및 예상 행수 jevida(강성욱) 2017.05.31 2944
2086 백업 파일 복원과 3241 오류 (Microsoft® SQL Server® Backup to Microsoft Azure®Tool 사용) jevida(강성욱) 2017.05.31 3104
2085 In-Memory OLTP를 사용할 때 체크포인트 파일이 너무 많아 지는 이유 jevida(강성욱) 2017.05.31 2675
2084 메모리 최적화 테이블변수와 701 오류 (loop 사용으로 인한 메모리 부족 오류) jevida(강성욱) 2017.05.31 3348
2083 메모리 최적화 테이블에서 해시 인덱스 사용시 버킷 카운트의 중요성 jevida(강성욱) 2017.05.31 2958
2082 인덱스 리빌드시 병렬로 실행계획이 생성되지 않는 이유 jevida(강성욱) 2017.03.13 4938
2081 SQL Server 833오류 (15 Sec Slow IO Detected) jevida(강성욱) 2017.03.13 4343
2080 SQL Server nonpreemptive 모드에서Long Sync IO 오류 jevida(강성욱) 2017.03.13 3110
2079 SQL Server DTC Transaction의 SPID = -2 반환 jevida(강성욱) 2017.03.13 2397
2078 SQL Server Read/Writer 동기화 작동 원리 jevida(강성욱) 2017.03.13 2752
» SQL Server가 논리 및 물리 프로세서를 결정하는 방법 jevida(강성욱) 2017.03.13 2865
2076 데이터베이스에서 사용자 삭제 오류 jevida(강성욱) 2017.03.13 2788
2075 SQL Server ODBC Driver 및 Command package Tool 설치 jevida(강성욱) 2017.01.11 4764
2074 SQL Server Install on Linux (Ubuntu – 16.0.4) jevida(강성욱) 2017.01.11 4997
2073 SQL Azure blob storage 백업을 위한 프록시 세팅 jevida(강성욱) 2017.01.11 4200
2072 SQL on Azure 환경에서 SQL 서버 연결 불능 문제(VNET 설정 문제) jevida(강성욱) 2017.01.11 3287
2071 SQL Server 2016 자동 통계 업데이트 임계값 변경 jevida(강성욱) 2017.01.11 4587





XE Login