다음을 통해 공유


서버 구성: 선호도 마스크

적용 대상: SQL Server

참고 항목

SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. ALTER SERVER CONFIGURATION을 대신 사용합니다.

멀티태스킹을 수행하기 위해 Windows는 서로 다른 프로세서 간에 프로세스 스레드를 이동하기도 합니다. 운영 체제 측면에서는 효율적이지만 각 프로세서 캐시에 데이터가 반복적으로 다시 로드되어 시스템 로드가 많은 경우 이 활동으로 인해 SQL Server 성능이 저하될 수 있습니다. 프로세서를 특정 스레드에 할당하면 프로세서 리로드를 없애 이러한 조건에서 성능을 개선할 수 있습니다. 스레드와 프로세서 간의 이러한 연결을 프로세서 선호도라고 합니다.

SQL Server는 affinity mask(CPU 선호도 마스크라고도 함) 및 affinity I/O mask의 두 가지 선호도 마스크 옵션을 사용하여 프로세서 선호도를 지원합니다. affinity I/O mask option에 대한 자세한 내용은 선호도 I/O 마스크 서버 구성 옵션 구성을 참조하세요. 33~64개의 프로세서가 있는 서버에 대한 CPU 및 I/O 선호도를 지원하려면 affinity64 마스크affinity64 I/O 마스크 서버 구성 옵션도 각각 사용해야 합니다.

참고 항목

33개에서 64개의 프로세서를 가지는 서버에 대한 선호도 지원은 64비트 운영 체제에서만 가능합니다.

SQL Server의 이전 릴리스에 존재했던 affinity mask 옵션은 CPU 선호도를 동적으로 제어합니다.

SQL Server에서는 SQL Server의 인스턴스를 다시 시작하지 않고도 affinity mask 옵션을 구성할 수 있습니다. sp_configure,를 사용하는 경우 컨피그레이션 옵션을 설정한 후 RECONFIGURE 또는 RECONFIGURE WITH OVERRIDE를 실행해야 합니다. SQL Server Express를 사용하는 경우 affinity mask 옵션을 변경하면 시스템을 다시 시작해야 합니다.

선호도 마스크를 동적으로 변경하여 SQL Server 내에서 프로세스 스레드를 바인딩하는 CPU 스케줄러를 온디맨드로 시작 및 종료할 수 있습니다. 서버에서 조건이 변경되면 이 문제가 발생할 수 있습니다. 예를 들어 SQL Server의 새 인스턴스가 서버에 추가될 경우 프로세서 로드를 재배포하기 위해 affinity mask 옵션을 조정해야 할 수 있습니다.

선호도 비트 마스크를 수정하려면 SQL Server에서 새 CPU 스케줄러를 사용하도록 설정하고, 기존 CPU 스케줄러를 사용하지 않도록 설정해야 합니다. 그런 다음 새 배치를 새 스케줄러 또는 나머지 스케줄러에서 처리할 수 있습니다.

새 CPU 스케줄러를 시작하기 위해, SQL Server는 새 스케줄러를 만들고 표준 스케줄러 목록에 추가합니다. 새 스케줄러는 수신되는 새 일괄 처리에 대해서만 고려됩니다. 현재 배치는 동일한 스케줄러에서 계속 실행됩니다. 확보하거나 새로 만든 작업자는 새 스케줄러로 마이그레이션됩니다.

스케줄러를 종료하려면 스케줄러의 모든 배치에서 작업이 완료되고 종료되어야 합니다. 종료된 스케줄러는 오프라인으로 표시되므로, 해당 스케줄러에는 새 배치가 예약되지 않습니다.

새 스케줄러를 추가하든 아니면 제거하든, 잠금 모니터, 검사점, 시스템 작업 스레드(DTC 처리) 및 신호 프로세스와 같은 영구 시스템 작업은 서버가 작동 중인 동안 스케줄러에서 계속 실행됩니다. 이러한 영구 시스템 작업은 동적으로 마이그레이션되지 않습니다. 이러한 시스템 태스크의 프로세서 로드를 스케줄러에 다시 배포하려면 SQL Server 인스턴스를 다시 시작해야 합니다. SQL Server가 영구 시스템 작업과 연결된 스케줄러를 종료하려고 하면, 작업이 오프라인 스케줄러에서 계속 실행됩니다(마이그레이션되지 않음). 이 스케줄러는 수정된 선호도 마스크로 프로세서에 바인딩되며 변경하기 전에 스케줄러에서 선호도가 설정된 프로세서로 로드를 할당하지 않습니다. 오프라인 스케줄러를 추가할 경우 시스템 로드에 큰 영향을 주면 안 됩니다. 그럴 경우 수정된 선호도 마스크로 사용 가능한 스케줄러에서 이러한 작업을 다시 구성하려면 데이터베이스 서버를 다시 시작해야 합니다.

동일한 CPU를 사용하도록 SQL Server의 affinity maskaffinity I/O mask 구성 값을 설정하지 마세요. SQL Server 작업자 스레드 예약과 I/O 처리 모두에 사용되도록 프로세서를 바인딩하면 성능이 저하될 수 있습니다. 따라서 구성 값이 동일한 프로세서에 대해 설정되지 않았는지 확인해야 합니다. affinity64 maskaffinity64 I/O mask에 동일한 권장 사항이 적용됩니다. affinity maskaffinity I/O mask가 겹치지 않도록 하기 위해 RECONFIGURE 명령은 일반 CPU 및 I/O 선호도가 상호 배타적인지 확인합니다. 그렇지 않으면 클라이언트 세션과 SQL Server 오류 로그에 해당 설정이 권장 구성이 아님을 나타내는 오류 메시지가 보고됩니다.

 Msg 5834, Level 16, State 1, Line 1
 The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration.

RECONFIGURE WITH OVERRIDE 옵션을 실행하면 CPU 및 I/O 선호도를 상호 배타적이지 않게 사용할 수 있습니다.

I/O 선호도 태스크(예: 지연 기록기 및 로그 작성기)는 affinity I/O mask로부터 직접 영향을 받습니다. 지연 기록기 및 로그 기록기 작업이 바인딩되지 않은 경우, 잠금 모니터 또는 검사점과 같은 다른 영구 작업에 대해 정의된 것과 동일한 규칙을 따릅니다.

존재하지 않는 CPU에 대해 매핑을 시도하는 선호도 마스크를 지정할 경우, RECONFIGURE 명령은 클라이언트 세션과 SQL Server 오류 로그 모두에 오류 메시지를 보고합니다. 이 경우 RECONFIGURE WITH OVERRIDE 옵션을 사용하면 효과가 없으며, 동일한 구성 오류가 다시 보고됩니다.

Windows 운영 체제에 의한 특정 워크로드 할당에서 SQL Server 작업을 제외할 수도 있습니다. 프로세서를 나타내는 비트를 1로 설정하면, SQL Server 데이터베이스 엔진이 스레드 할당용으로 해당 프로세서를 선택합니다. affinity mask0(기본값)으로 설정하면 Microsoft Windows 예약 알고리즘이 스레드의 선호도를 설정합니다. affinity mask를 0이 아닌 값으로 설정하면 SQL Server 선호도가 이 값을 선택에 맞는 프로세서를 지정하는 비트 마스크로 해석합니다.

SQL Server 스레드를 특정 프로세서에서 실행하지 않도록 분리하면, Microsoft Windows가 Windows와 관련한 프로세스의 시스템 처리를 더 잘 평가할 수 있습니다. 예를 들어 인스턴스 A와 인스턴스 B라는 두 개의 SQL Server 인스턴스를 실행하고 CPU가 8개인 서버에서 시스템 관리자는 affinity mask 옵션을 사용하여 CPU 4개로 구성된 첫째 집합을 인스턴스 A에 할당하고 나머지 4개의 둘째 집합을 인스턴스 B에 할당할 수 있습니다. 32개 이상의 프로세서를 구성하려면 affinity maskaffinity64 mask를 모두 설정해야 합니다. affinity mask 값은 다음과 같습니다.

마스크의 바이트 CPU 수
1바이트 최대 8개의 CPU
2바이트 최대 16개의 CPU
3바이트 최대 24개의 CPU
4바이트 최대 32개의 CPU

32개 이상의 CPU를 포함하려면 처음 32개 CPU에 대해 4바이트 affinity mask를 구성하고 나머지 CPU에 대해 최대 4바이트 affinity64 mask를 구성합니다.

SQL Server 프로세서 선호도 설정은 특수한 작업이므로 필요한 경우에만 사용합니다. 대부분의 경우 기본 Windows 선호도를 사용할 때 최상의 성능을 제공합니다. 선호도 마스크를 설정할 때 다른 애플리케이션의 CPU 요구 사항을 고려해야 합니다. 자세한 내용은 Windows 운영 체제 설명서를 참조하세요.

참고 항목

프로세스 모니터를 사용하여 개별 프로세서 사용량을 확인하고 분석할 수 있습니다.

affinity I/O mask 옵션을 지정할 때는 affinity mask 구성 옵션을 함께 사용해야 합니다. 하지만 앞서 언급했듯이, affinity mask 스위치와 affinity I/O mask 옵션 모두에 동일한 CPU를 사용하도록 설정하지 마세요. 각 CPU에 해당하는 비트 상태는 다음과 같은 상태 중 하나여야 합니다.

  • 0 옵션과 affinity mask 옵션 모두에서 affinity I/O mask입니다.
  • 1 옵션에서 affinity mask이며 0 옵션에서 affinity I/O mask입니다.
  • 0 옵션에서 affinity mask이며 1 옵션에서 affinity I/O mask입니다.

주의

Windows 운영 체제에서 CPU 선호도를 구성하지 말고 SQL Server에서도 affinity mask를 구성하지 않습니다. 이러한 설정은 동일한 결과를 달성하기 위한 것으로, 구성이 일치하지 않으면 예측할 수 없는 결과가 발생할 수도 있습니다. SQL Server CPU 선호도는 SQL Server의 sp_configure 옵션을 사용하여 구성하는 것이 가장 바람직합니다.

예제

affinity mask 옵션을 설정하는 예로, 프로세서 1, 2 및 5를 사용 가능한 것으로 선택하고 위치 1, 2 및 5의 비트를 1로 설정하고 비트 0, 3, 4, 6 및 7을 0로 설정하는 경우 0x26(38에 해당하는 10진수)의 16진수 값을 사용해야 합니다. 오른쪽에서 왼쪽으로 비트 위치의 번호를 매깁니다.

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'affinity mask', 38;
RECONFIGURE;
GO

다음 표는 8-CPU 시스템의 affinity mask 값을 보여줍니다.

10진수 값 이진수 비트 마스크 프로세서에서 SQL Server 스레드 허용
1 00000001 0
3 00000011 0 및 1
7 00000111 0, 1 및 2
15 00001111 0, 1, 2, 3
31 00011111 0, 1, 2, 3, 4
63 00111111 0, 1, 2, 3, 4, 5
127 01111111 0, 1, 2, 3, 4, 5, 6
255 11111111 0, 1, 2, 3, 4, 5, 6, 7

affinity mask 옵션은 고급 옵션입니다. sp_configure 시스템 저장 프로시저를 사용하여 설정을 변경하는 경우 affinity maskshow advanced options로 설정했을 때만 1를 변경할 수 있습니다. Transact-SQL RECONFIGURE 명령을 실행하면 SQL Server 인스턴스를 다시 시작하지 않더라도 새 설정이 즉시 적용됩니다.

NUMA(Non-Uniform Memory Access)

하드웨어 기반 NUMA(Non-uniform Memory Access)를 사용하고 affinity mask가 설정되어 있으면 노드의 모든 스케줄러가 해당 CPU에 바인딩됩니다. affinity mask가 설정되어 있지 않으면 각 스케줄러의 선호도는 NUMA 노드 내의 CPU 그룹으로 바인딩되고 NUMA 노드 N1로 매핑된 스케줄러에서 노드의 모든 CPU 작업을 예약할 수 있지만 다른 노드와 연결된 CPU 작업은 예약할 수 없습니다.

단일 NUMA 노드에서 실행되는 모든 작업은 해당 노드의 버퍼 페이지만 사용할 수 있습니다. 작업이 여러 노드의 CPU에서 병렬로 실행되는 경우, 모든 관련 노드에서 메모리를 사용할 수 있습니다.

라이선스 문제

동적 선호도는 CPU 라이선스를 통해 엄격하게 제한됩니다. SQL Server는 라이선스 정책을 위반하는 affinity mask 옵션의 구성을 허용하지 않습니다.

Startup 클래스

지정된 선호도 마스크가 SQL Server 시작 중 또는 데이터베이스 연결 중에 라이선스 정책을 위반할 경우, 엔진 계층은 시작 프로세스 또는 데이터베이스 연결/복원 작업을 완료한 다음 선호도 마스크에 대한 sp_configure 실행 값을 다시 0으로 설정하여 SQL Server 오류 로그에 오류 메시지를 추가합니다.

재구성

Transact-SQL RECONFIGURE 명령을 실행할 때 지정된 선호도 마스크가 라이선스 정책을 위반하면 클라이언트 세션과 SQL Server 오류 로그에 오류 메시지가 보고되므로 데이터베이스 관리자는 해당 선호도 마스크를 다시 구성해야 합니다. 이 경우 RECONFIGURE WITH OVERRIDE 명령이 허용되지 않습니다.