affinity mask 서버 구성 옵션affinity mask Server Configuration Option

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

참고

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다.This feature will be removed in a future version of Microsoft SQL Server. 새 개발 작업에서는 이 기능을 사용하지 말고, 현재 이 기능을 사용하는 응용 프로그램은 가능한 한 빨리 수정하세요.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. ALTER SERVER CONFIGURATION(Transact-SQL)을 대신 사용합니다. Use ALTER SERVER CONFIGURATION (Transact-SQL) instead.

멀티태스킹을 수행하기 위해 MicrosoftMicrosoft Windows는 서로 다른 프로세서 간에 프로세스 스레드를 이동하기도 합니다.To carry out multitasking, MicrosoftMicrosoft Windows sometimes move process threads among different processors. 이는 운영 체제의 측면에서 볼 때는 효율적이지만 각 프로세서 캐시에 데이터를 반복적으로 다시 로드해야 하므로 시스템 부하가 큰 경우 SQL ServerSQL Server 성능 저하를 초래할 수 있습니다.Although efficient from an operating system point of view, this activity can reduce SQL ServerSQL Server performance under heavy system loads, as each processor cache is repeatedly reloaded with data. 프로세서를 특정 스레드에 할당하면 프로세서를 다시 로드할 필요가 없고 프로세서 간에 스레드 마이그레이션이 감소되어 컨텍스트 전환이 줄게 되므로 성능이 향상될 수 있습니다. 스레드와 프로세서의 이러한 관계를 프로세서 선호도라고 합니다.Assigning processors to specific threads can improve performance under these conditions by eliminating processor reloads and reducing thread migration across processors (thereby reducing context switching); such an association between a thread and a processor is called processor affinity.

SQL ServerSQL Server 에서는 두 가지 선호도 마스크 옵션인 선호도 마스크( CPU 선호도 마스크라고도 함)와 선호도 I/O 마스크를 통해 프로세서 선호도를 지원합니다. supports processor affinity by means of two affinity mask options: affinity mask (also known as CPU affinity mask) and affinity I/O mask. 선호도 I/O 마스크 옵션에 대한 자세한 내용은 선호도 입력-출력 마스크 서버 구성 옵션을 참조하세요.For more information on the affinity I/O maskoption, see affinity Input-Output mask Server Configuration Option. 33-64개 프로세서가 있는 서버에 대한 CPU 및 I/O 선호도를 지원하려면 affinity64 마스크 서버 구성 옵션affinity64 입력-출력 마스크 서버 구성 옵션을 추가로 사용해야 합니다.CPU and I/O affinity support for servers with 33 to 64 processors requires the additional use of the affinity64 mask Server Configuration Option and affinity64 Input-Output mask Server Configuration Option, respectively.

참고

33개에서 64개의 프로세서를 가지는 서버에 대한 선호도 지원은 64비트 운영 체제에서만 가능합니다.Affinity support for servers with 33 to 64 processors is only available on 64-bit operating systems.

이전 버전의 SQL ServerSQL Server에 있던 선호도 마스크 옵션은 CPU 선호도를 동적으로 제어하는 역할을 했습니다.The affinity mask option, which existed in earlier releases of SQL ServerSQL Server, dynamically controls CPU affinity.

SQL ServerSQL Server에서는 SQL ServerSQL Server인스턴스를 다시 시작하지 않고도 선호도 마스크 옵션을 구성할 수 있습니다.In SQL ServerSQL Server, the affinity mask option can be configured without requiring a restart of the instance of SQL ServerSQL Server. sp_configure를 사용할 경우에는 구성 옵션을 설정한 후 RECONFIGURE 또는 RECONFIGURE WITH OVERRIDE를 실행해야 합니다.When you are using sp_configure, you must run either RECONFIGURE or RECONFIGURE WITH OVERRIDE after setting a configuration option. SQL Server ExpressSQL Server Express를 사용하는 경우 선호도 마스크 옵션을 변경하면 시스템을 다시 시작해야 합니다.When you are using SQL Server ExpressSQL Server Express, changing the affinity mask option does require a restart.

선호도 마스크는 동적으로 변경되므로 SQL ServerSQL Server에서 프로세스 스레드를 바인딩할 CPU 스케줄러를 요청 시 시작 및 종료할 수 있습니다.Changes to the affinity masks occur dynamically, allowing for on-demand startup and shutdown of the CPU schedulers that bind process threads within SQL ServerSQL Server. 이는 서버 조건이 변경될 때 발생합니다.This can occur as conditions change on the server. 예를 들어 서버에 SQL ServerSQL Server 의 새 인스턴스를 추가하는 경우 선호도 마스크 옵션을 조정하여 프로세서 부하를 다시 분산시켜야 할 수도 있습니다.For example, if a new instance of SQL ServerSQL Server is added to the server, it may be necessary to make adjustments to the affinity mask option to redistribute processor load.

선호도 비트마스크를 수정하려면 SQL ServerSQL Server 에서 새 CPU 스케줄러를 설정하고 기존 CPU 스케줄러를 해제해야 합니다.Modifications to the affinity bitmasks require SQL ServerSQL Server to enable a new CPU scheduler and disable the existing CPU scheduler. 그런 다음 새 스케줄러나 남아 있는 스케줄러에서 새 일괄 처리를 처리할 수 있습니다.New batches can then be processed on the new or remaining schedulers.

새 CPU 스케줄러를 시작하려면 SQL ServerSQL Server 에서 새 스케줄러를 만들어 이 서버의 표준 스케줄러 목록에 추가합니다.To start a new CPU scheduler, SQL ServerSQL Server creates a new scheduler and adds it to the list of its standard schedulers. 새 스케줄러는 새로 들어오는 일괄 처리에만 사용됩니다.The new scheduler is considered only for the new incoming batches. 현재 일괄 처리는 동일한 스케줄러에서 계속 실행됩니다.Current batches continue to run on the same scheduler. 작업자가 사용 가능해지거나 새로 생성될 때 새 스케줄러로 마이그레이션됩니다.The workers migrate to the new scheduler as they free up, or as new workers are created.

스케줄러를 종료하려면 스케줄러에서 모든 일괄 처리 동작을 완료하고 일괄 처리를 종료해야 합니다.Shutting down a scheduler requires all batches on the scheduler to complete their activities and exit. 종료된 스케줄러는 새 일괄 처리가 예약되지 않도록 오프라인으로 표시됩니다.A scheduler that has been shut down is marked as offline so that no new batch is scheduled on it.

새 스케줄러를 추가하거나 제거해도 모니터 잠금, 검사점, 시스템 태스크 스레드(DTC 처리) 및 신호 처리 같은 영구 시스템 태스크는 서버가 작동하는 동안 스케줄러에서 계속 실행됩니다.Whether a new scheduler is added or removed, the permanent system tasks such as lockmonitor, checkpoint, system task thread (processing DTC), and signal process continue to run on the scheduler while the server is operational. 이러한 영구 시스템 태스크는 동적으로 마이그레이션되지 않습니다.These permanent system tasks do not dynamically migrate. 이러한 시스템 태스크의 프로세서 로드를 스케줄러에 다시 배포하려면 SQL ServerSQL Server 인스턴스를 다시 시작해야 합니다.To redistribute processor load for these system tasks across schedulers, it is necessary to restart the SQL ServerSQL Server instance. SQL ServerSQL Server 에서 영구 시스템 태스크와 연결된 스케줄러를 종료하려 하면 해당 태스크는 오프라인 스케줄러에서 계속 실행됩니다(마이그레이션 없음).If SQL ServerSQL Server attempts to shut down a scheduler associated with a permanent system task, the task continues to run on the offline scheduler (no migration). 이 스케줄러는 수정된 선호도 마스크로 프로세서에 바인딩되며 변경하기 전에 스케줄러에서 선호도가 설정된 프로세서로 로드를 할당하면 안 됩니다.This scheduler is bound to the processors in the modified affinity mask and should not put any load on the processor it was affinitized with before the change. 오프라인 스케줄러를 추가할 경우 시스템 로드에 큰 영향을 주면 안 됩니다.Having extra offline schedulers, should not significantly affect the load of the system. 영향을 주는 경우에는 데이터베이스 서버를 다시 부팅하여 이러한 태스크를 다시 구성해야 합니다.If this is not the case, a database server reboot is required to reconfigure these tasks.

I/O 선호도 태스크(예: 지연 기록기 및 로그 작성기)는 직접 I/O 선호도 마스크의 영향을 받습니다.The I/O affinity tasks (such as lazywriter and logwriter) are directly affected by the I/O affinity mask. 지연 기록기 및 로그 작성기 태스크에 선호도를 설정하지 않으면 이러한 태스크는 모니터 잠금 또는 검사점 같은 다른 영구 태스크에 대해 정의된 동일한 규칙을 따릅니다.If the lazywriter and logwriter tasks are not affinitized, they follow the same rules defined for the other permanent tasks such as lockmonitor or checkpoint.

새 선호도 마스크가 유효한지 확인하려면 RECONFIGURE 명령을 사용하여 정상 CPU 및 I/O 선호도가 상호 배타적인지 확인합니다.To ensure that the new affinity mask is valid, the RECONFIGURE command verifies that the normal CPU and I/O affinities are mutually exclusive. 상호 배타적이 아니면 클라이언트 세션과 SQL ServerSQL Server 오류 로그에 해당 설정이 권장 구성이 아님을 나타내는 오류 메시지가 보고됩니다.If this is not the case, an error message is reported to the client session and to the SQL ServerSQL Server error log, indicating that such a setting is not recommended. RECONFIGURE WITH OVERRIDE 옵션을 실행하면 상호 배타적이 아닌 CPU 및 I/O 선호도를 사용할 수 있습니다.Running RECONFIGURE WITH OVERRIDE options allows CPU and I/O affinities that are not mutually exclusive.

존재하지 않는 CPU로 매핑을 시도하는 선호도 마스크를 지정하면 RECONFIGURE 명령은 클라이언트 세션과 SQL ServerSQL Server 오류 로그에 모두 오류 메시지를 보고합니다.If you specify an affinity mask that attempts to map to a nonexistent CPU, the RECONFIGURE command reports an error message to both the client session and the SQL ServerSQL Server error log. 이 경우 RECONFIGURE WITH OVERRIDE 옵션을 사용해도 영향을 미치지 않으며 동일한 구성 오류가 다시 보고됩니다.Using the RECONFIGURE WITH OVERRIDE option has no effect in this case, and the same configuration error is reported again.

Windows 2000 또는 Windows Server 2003 운영 체제에 의해 특정 작업이 할당된 프로세서에서 SQL ServerSQL Server 작업을 제외할 수도 있습니다.You can also exclude SQL ServerSQL Server activity from processors assigned specific workload assignments by the Windows 2000 or Windows Server 2003 operating system. 프로세서를 나타내는 비트를 1로 설정하면 스레드를 할당하도록 SQL ServerSQL Server 데이터베이스 엔진이 해당 프로세서를 선택합니다.If you set a bit representing a processor to 1, that processor is selected by the SQL ServerSQL Server Database Engine for thread assignment. 선호도 마스크 를 0(기본값)으로 설정하면 Microsoft Windows 2000 또는 Windows Server 2003 예약 알고리즘이 스레드의 선호도를 설정합니다.When you set affinity mask to 0 (the default), the Microsoft Windows 2000 or Windows Server 2003 scheduling algorithms set the thread's affinity. 선호도 마스크 를 0이 아닌 값으로 설정하면 SQL ServerSQL Server 선호도가 선택 가능한 프로세서를 지정하는 비트 마스크로 이 값을 해석합니다.When you set affinity mask to any nonzero value, SQL ServerSQL Server affinity interprets the value as a bitmask that specifies those processors eligible for selection.

특정 프로세서에서 실행되는 SQL ServerSQL Server 스레드를 분리하면 Microsoft Windows 2000 또는 Windows Server 2003에서는 시스템의 Windows 관련 프로세스 처리를 보다 잘 평가할 수 있습니다.By segregating SQL ServerSQL Server threads from running on particular processors, Microsoft Windows 2000 or Windows Server 2003 can better evaluate the system's handling of processes specific to Windows. 예를 들어 인스턴스 A와 인스턴스 B라는 두 개의 SQL ServerSQL Server 인스턴스를 실행하고 CPU가 8개인 서버에서 시스템 관리자는 선호도 마스크 옵션을 사용하여 CPU 4개로 이루어진 첫째 집합을 인스턴스 A에 할당하고 둘째 집합을 인스턴스 B에 할당할 수 있습니다. 32개보다 많은 프로세서를 구성하려면 affinity mask 및 affinity64 mask를 모두 설정해야 합니다.For example, on an 8-CPU server running two instances of SQL ServerSQL Server (instance A and B), the system administrator could use the affinity mask option to assign the first set of 4 CPUs to instance A and the second set of 4 to instance B. To configure more than 32 processors, set both the affinity mask and the affinity64 mask. 선호도 마스크 의 값은 다음과 같습니다.The values for affinity mask are as follows:

  • 1바이트 선호도 마스크 의 경우 하나의 다중 프로세서 컴퓨터에서 CPU가 8개까지 허용됩니다.A one-byte affinity mask covers up to 8 CPUs in a multiprocessor computer.

  • 2바이트 선호도 마스크 의 경우 하나의 다중 프로세서 컴퓨터에서 CPU가 16개까지 허용됩니다.A two-byte affinity mask covers up to 16 CPUs in a multiprocessor computer.

  • 3바이트 선호도 마스크 의 경우 하나의 다중 프로세서 컴퓨터에서 CPU가 24개까지 허용됩니다.A three-byte affinity mask covers up to 24 CPUs in a multiprocessor computer.

  • 4바이트 선호도 마스크 의 경우 하나의 다중 프로세서 컴퓨터에서 CPU가 32개까지 허용됩니다.A four-byte affinity mask covers up to 32 CPUs in a multiprocessor computer.

  • 32개보다 많은 CPU를 허용하려면 처음 32개 CPU에 대해 4바이트 affinity mask를 구성하고 나머지 CPU에 대해 최대 4바이트 affinity64 mask를 구성합니다.To cover more than 32 CPUs, configure a four-byte affinity mask for the first 32 CPUs and up to a four-byte affinity64 mask for the remaining CPUs.

    SQL ServerSQL Server 프로세서 선호도 설정은 특수 작업이므로 필요한 경우에만 사용하는 것이 좋습니다.Because setting SQL ServerSQL Server processor affinity is a specialized operation, it is recommended that it be used only when necessary. 대부분의 경우 Microsoft Windows 2000 또는 Windows Server 2003 기본 선호도를 사용할 때 최상의 성능을 제공합니다.In most cases, the Microsoft Windows 2000 or Windows Server 2003 default affinity provides the best performance. 선호도 마스크를 설정할 때 다른 응용 프로그램의 CPU 요구 사항도 고려해야 합니다.You should also consider the CPU requirements for other applications when setting the affinity masks. 자세한 내용은 Windows 운영 체제 설명서를 참조하십시오.For more information, see your Windows operating system documentation.

참고

Windows 시스템 모니터를 사용하여 각 프로세서 사용량을 확인 및 분석할 수 있습니다.You can use the Windows System Monitor to view and analyze individual processor usage.

선호도 I/O 마스크 옵션을 지정할 경우에는 선호도 마스크 구성 옵션과 연결하여 사용해야 합니다.When specifying the affinity I/O mask option, you must use it in connection with the affinity mask configuration option. 선호도 I/O 마스크 스위치와 선호도 마스크 옵션에서 동일한 CPU를 사용하지 마세요.Do not enable the same CPU in both the affinity mask switch and the affinity I/O mask option. 각 CPU에 해당하는 비트 상태는 다음과 같은 상태 중 하나여야 합니다.The bits corresponding to each CPU should be in one of these three states:

  • affinity mask 옵션과 affinity I/O mask 옵션에서 모두 0입니다.0 in both the affinity mask option and the affinity I/O mask option.

  • affinity mask 옵션에서는 1이고 affinity I/O mask 옵션에서는 0입니다.1 in the affinity mask option and 0 in the affinity I/O mask option.

  • affinity mask 옵션에서는 0이고 affinity I/O mask 옵션에서는 1입니다.0 in the affinity mask option and 1 in the affinity I/O mask option.

주의

Windows 운영 체제에서 CPU 선호도를 구성하지 말고 SQL ServerSQL Server에서도 선호도 마스크를 구성하지 마십시오.Do not configure CPU affinity in the Windows operating system and also configure the affinity mask in SQL ServerSQL Server. 동일한 결과를 얻기 위해 이렇게 설정하는 경우도 있지만 구성이 일치하지 않는 경우 예상치 못한 결과가 나올 수 있습니다.These settings are attempting to achieve the same result, and if the configurations are inconsistent, you may have unpredictable results. SQL ServerSQL Server CPU 선호도는 SQL ServerSQL Server의 sp_configure 옵션을 사용하여 구성하는 것이 가장 좋습니다. CPU affinity is best configured using the sp_configure option in SQL ServerSQL Server.

예제Example

affinity mask 옵션 설정의 예를 들기 위해 비트 1, 2, 5가 1로 설정되어 있고 비트 0, 3, 4, 6, 7이 0으로 설정되어 있는 상태에서 프로세서 1, 2, 5를 선택할 수 있고 16진수 값 0x26이나 이에 해당하는 10진수 값 38 이 지정되었다고 가정해 봅시다.As an example of setting the affinity mask option, if processors 1, 2, and 5 are selected as available with bits 1, 2, and 5 set to 1 and bits 0, 3, 4, 6, and 7 set to 0, a hexadecimal value of 0x26 or the decimal equivalent of 38 is specified. 비트의 번호는 오른쪽에서 왼쪽으로 매깁니다.Number the bits from right to left. affinity mask 옵션은 프로세서를 0부터 31까지 번호를 매기므로 다음 예에서 카운터 1 은 서버의 둘째 프로세서를 나타냅니다.The affinity mask option starts counting processors from 0 to 31, so that in the following example the counter 1 represents the second processor on the server.

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

다음은 CPU가 8개인 시스템의 선호도 마스크 값입니다.These are affinity mask values for an 8-CPU system.

10진수 값Decimal value 이진수 비트 마스크Binary bit mask 프로세서의 SQL Server 스레드 허용Allow SQL Server threads on processors
11 0000000100000001 00
33 0000001100000011 0 및 10 and 1
77 0000011100000111 0, 1 및 20, 1, and 2
1515 0000111100001111 0, 1, 2, 30, 1, 2, and 3
3131 0001111100011111 0, 1, 2, 3, 40, 1, 2, 3, and 4
6363 0011111100111111 0, 1, 2, 3, 4, 50, 1, 2, 3, 4, and 5
127127 0111111101111111 0, 1, 2, 3, 4, 5, 60, 1, 2, 3, 4, 5, and 6
255255 1111111111111111 0, 1, 2, 3, 4, 5, 6, 70, 1, 2, 3, 4, 5, 6, and 7

affinity mask는 고급 옵션입니다.The affinity mask option is an advanced option. sp_configure 시스템 저장 프로시저를 사용하여 설정을 변경하는 경우 show advanced options 를 1로 설정했을 때만 선호도 마스크 를 변경할 수 있습니다.If you are using the sp_configure system stored procedure to change the setting, you can change affinity mask only when show advanced options is set to 1. Transact-SQLTransact-SQL RECONFIGURE 명령을 실행하면 SQL ServerSQL Server 인스턴스를 다시 시작하지 않더라도 새 설정이 즉시 적용됩니다.After executing the Transact-SQLTransact-SQL RECONFIGURE command, the new setting takes effect immediately without requiring a restart of the SQL ServerSQL Server instance.

NUMA(Non-uniform Memory Access)Non-uniform Memory Access (NUMA)

하드웨어 기반 NUMA(Non-uniform Memory Access)를 사용하고 affinity mask가 설정되어 있으면 노드의 모든 스케줄러에서 선호도가 해당 CPU로 설정됩니다.When using hardware based non-uniform memory access (NUMA) and the affinity mask is set, every scheduler in a node will be affinitized to its own CPU. affinity mask가 설정되어 있지 않으면 각 스케줄러의 선호도는 NUMA 노드 내의 CPU 그룹으로 설정되고 NUMA 노드 N1로 매핑된 스케줄러에서 노드의 모든 CPU 작업을 예약할 수 있지만 다른 노드와 연결된 CPU 작업은 예약할 수 없습니다.When the affinity mask is not set, each scheduler is affinitized to the group of CPUs within the NUMA node and a scheduler mapped to NUMA node N1 can schedule work on any CPU in the node, but not on CPUs associated with another node.

단일 NUMA 노드에서 실행되는 모든 작업은 해당 노드의 버퍼 페이지만 사용할 수 있습니다.Any operation running on a single NUMA node can only use buffer pages from that node. 작업이 여러 노드의 CPU에서 병렬로 실행되는 경우 관련된 모든 노드의 메모리를 사용할 수 있습니다.When an operation is run in parallel on CPUs from multiple nodes, memory can be used from any node involved.

라이선스 문제Licensing Issues

동적 선호도는 CPU 라이선스에 의해 엄격한 제약을 받습니다.Dynamic affinity is tightly constrained by CPU licensing. SQL ServerSQL Server 는 라이선스 정책을 위반하는 선호도 마스크 옵션의 구성을 허용하지 않습니다. does not allow any configuration of affinity mask options that violates the licensing policy.

시작Startup

지정된 선호도 마스크가 SQL ServerSQL Server 시작 시 또는 데이터베이스 연결 시 라이선스 정책을 위반하면 엔진 계층에서는 시작 프로세스나 데이터베이스 연결/복원 작업을 완료한 후에 선호도 마스크의 sp_configure 실행 값을 0으로 되돌리므로 SQL ServerSQL Server 오류 로그에 오류 메시지가 보고됩니다.If a specified affinity mask violates the licensing policy during SQL ServerSQL Server startup or during database attach, the engine layer will complete the startup process or database attach/restore operation, and then it will reset the sp_configure run value for the affinity mask to zero, issuing an error message to the SQL ServerSQL Server error log.

다시 구성Reconfigure

Transact-SQLTransact-SQL RECONFIGURE 명령을 실행할 때 지정된 선호도 마스크가 라이선스 정책을 위반하면 클라이언트 세션과 SQL ServerSQL Server 오류 로그에 오류 메시지가 보고되므로 데이터베이스 관리자는 해당 선호도 마스크를 다시 구성해야 합니다.If a specified affinity mask violates the licensing policy when running Transact-SQLTransact-SQL RECONFIGURE command, an error message is reported to the client session and to the SQL ServerSQL Server error log, requiring the database administrator to reconfigure the affinity mask. 이 경우 RECONFIGURE WITH OVERRIDE 명령은 사용할 수 없습니다.No RECONFIGURE WITH OVERRIDE command is accepted in this case.

참고 항목See Also

리소스 사용 모니터링(시스템 모니터) Monitor Resource Usage (System Monitor)
RECONFIGURE(Transact-SQL) RECONFIGURE (Transact-SQL)
서버 구성 옵션(SQL Server) Server Configuration Options (SQL Server)
sp_configure (Transact-SQL) sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION(Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)