리소스 관리자 리소스 풀Resource Governor Resource Pool

이 항목은 다음에 적용됩니다.예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

SQL ServerSQL Server 리소스 관리자에서 리소스 풀은 데이터베이스 엔진Database Engine인스턴스의 물리적 리소스의 하위 집합을 나타냅니다.In the SQL ServerSQL Server Resource Governor, a resource pool represents a subset of the physical resources of an instance of the 데이터베이스 엔진Database Engine. 리소스 관리자를 사용하면 들어오는 응용 프로그램 요청이 리소스 풀에서 사용할 수 있는 CPU, 물리적 IO 및 메모리 양을 제한할 수 있습니다.Resource Governor enables you to specify limits on the amount of CPU, physical IO, and memory that incoming application requests can use within the resource pool. 각 리소스 풀에는 하나 이상의 작업 그룹이 포함될 수 있습니다.Each resource pool can contain one or more workload groups. 세션이 시작되면 리소스 관리자 분류자가 세션을 특정 작업 그룹에 할당하고 세션은 작업 그룹에 할당된 리소스를 사용하여 실행해야 합니다.When a session is started, the Resource Governor classifier assigns the session to a specific workload group, and the session must run using the resources assigned to the workload group.

리소스 풀 개념Resource Pool Concepts

리소스 풀 또는 풀은 서버의 물리적 리소스를 나타냅니다.A resource pool, or pool, represents the physical resources of the server. 풀은 SQL ServerSQL Server 인스턴스 내부의 가상 SQL ServerSQL Server 인스턴트로 간주할 수 있습니다.You can think of a pool as a virtual SQL ServerSQL Server instance inside of a SQL ServerSQL Server instance. 풀은 두 부분으로 구성되어 있는데,A pool has two parts. 최소 리소스 예약을 사용하는 한 부분은 다른 풀과 겹치지 않고One part does not overlap with other pools, which enables minimum resource reservation. 가능한 최대 리소스 소비를 지원하는 다른 한 부분은 다른 풀과 공유됩니다.The other part is shared with other pools, which supports maximum possible resource consumption. 각 리소스(CPU, 메모리, 물리적 IO)에 대해 다음 설정 중 하나 이상을 지정하여 풀 리소스를 정의합니다.The pool resources are defined by specifying one or more of the following settings for each resource (CPU, memory, and physical IO):

  • MIN_CPU_PERCENT 및 MAX_CPU_PERCENTMIN_CPU_PERCENT and MAX_CPU_PERCENT

    이 설정은 CPU 경합이 있을 때 리소스 풀의 모든 요청에 대해 보장되는 최소 및 최대 평균 CPU 대역폭입니다.These settings are the minimum and maximum guaranteed average CPU bandwidth for all requests in the resource pool when there is CPU contention. 이 설정을 사용하면 각 작업의 요구 사항을 기준으로 여러 작업에 대해 예측 가능한 CPU 리소스 사용량을 설정할 수 있습니다.You can use these settings to establish predictable CPU resource usage for multiple workloads that is based on the needs of each workload. 예를 들어 회사의 영업부와 마케팅 부서가 동일한 데이터베이스를 공유한다고 가정해 보겠습니다.For example, assume the Sales and Marketing departments in a company share the same database. 영업부에는 우선 순위가 높은 쿼리를 사용하는 CPU 집약적 작업이 있습니다.The Sales department has a CPU-intensive workload with high-priority queries. 마케팅 부서에도 CPU 집약적 작업이 있지만 쿼리 우선 순위가 더 낮습니다.The Marketing department also has a CPU-intensive workload, but has lower-priority queries. 이 경우 두 부서에 대해 별도의 리소스 풀을 만든 후 영업부 리소스 풀은 최소 CPU 비율을 70으로 지정하고 마케팅 부서 리소스 풀은 최대 CPU 비율을 30%로 지정할 수 있습니다.By creating a separate resource pool for each department, you can assign a minimum CPU percentage of 70 for the Sales resource pool and a maximum CPU percentage of 30 for the Marketing resource pool. 이렇게 하면 영업부 작업은 필요한 CPU 리소스를 받을 수 있고 마케팅 부서 작업은 영업부 작업의 CPU 수요와 격리됩니다.This ensures that the Sales workload receives the CPU resources it requires and the Marketing workload is isolated from the CPU demands of the Sales workload. 최대 CPU 비율은 편의적 최대값입니다.Note that the maximum CPU percentage is an opportunistic maximum. 사용 가능한 CPU 용량이 있으면 100% 모두 작업에 사용됩니다.If there is available CPU capacity, the workload uses it up to 100 percent. 즉, CPU 리소스 경합이 있을 때만 최대값이 적용됩니다.The maximum value only applies when there is contention for CPU resources. 이 예에서는 필요한 경우 영업부 작업이 차단되고 마케팅 부서 작업에 CPU의 100%가 모두 사용될 수 있습니다.In this example, if the Sales workload is switched off, the Marketing workload can use 100 percent of the CPU if needed.

  • CAP_CPU_PERCENTCAP_CPU_PERCENT

    이 설정은 리소스 풀의 모든 요청에 대한 CPU 대역폭 하드 상한입니다.This settings is a hard cap limit on the CPU bandwidth for all requests in the resource pool. 풀에 연결된 작업이 CPU_CPU_PERCENT 값보다 큰 값이 아닌 MAX_CPU_PERCENT 값보다 큰 CPU 용량(사용 가능한 경우)을 사용할 수 있습니다.Workloads associated with the pool can use CPU capacity above the value of MAX_CPU_PERCENT if it is available, but not above the value of CAP_CPU_PERCENT. 위의 예로 돌아가, 마케팅 부서가 리소스 사용 비용을 환불 받는다고 가정해 보겠습니다.Using the example above, lets assume that the Marketing department is being charged for their resource usage. 마케팅 부서는 예측 가능한 요금 청구를 원하며 30% 이상의 CPU에 대해서는 비용을 지불하지 않고자 합니다.They want predictable billing and do not want to pay for more than 30 percent of the CPU. 이 경우 마케팅 리소스 풀에 대해 CAP_CPU_PERCENT를 30으로 설정하면 됩니다.This can be accomplished by setting the CAP_CPU_PERCENT to 30 for the Marketing resource pool.

  • MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENTMIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT

    이 설정은 리소스 풀에 예약된 최소 및 최대 메모리 양이며 다른 리소스 풀과 공유될 수 없습니다.These settings are the minimum and maximum amount of memory reserved for the resource pool that can not be shared with other resource pools. 이때 참조되는 메모리는 버퍼 풀 메모리(예: 데이터 및 인덱스 페이지)가 아니라 쿼리 실행 부여 메모리입니다.The memory referenced here is query execution grant memory, not buffer pool memory (for example, data and index pages). 풀의 최소 메모리 값을 설정하면 해당 리소스 풀에서 실행될 수 있는 모든 요청에 대해 지정한 비율만큼의 메모리가 사용되도록 보장할 수 있습니다.Setting a minimum memory value for a pool means that you are ensuring that the percentage of memory specified will be available for any requests that might run in this resource pool. 이는 이 설정을 MIN_CPU_PERCENT와 구별하는 중요한 요소인데, 이 경우 지정된 리소스 풀에 해당 풀에 속한 작업 그룹의 요청이 없을 때에도 풀에 메모리가 남아 있을 수 있기 때문입니다.This is an important differentiator compared to MIN_CPU_PERCENT, because in this case memory may remain in the given resource pool even when the pool does not have any requests in the workload groups belonging to this pool. 활성 요청이 없는 경우에도 남아 있는 메모리를 다른 풀에서 사용할 수 없기 때문에 이 설정을 사용할 때는 신중을 기해야 합니다.Therefore it is crucial that you be very careful when using this setting, because this memory will be unavailable for use by any other pool, even when there are no active requests. 풀의 최대 메모리 값 설정은 풀에서 요청이 실행될 때 전체 메모리 중 이 비율 이상은 사용할 수 없음을 의미합니다.Setting a maximum memory value for a pool means that when requests are running in this pool, they will never get more than this percentage of overall memory.

  • AFFINITYAFFINITY

    이 설정을 사용하면 하나 이상의 스케줄러 또는 NUMA 노드에 대해 리소스 풀의 선호도를 설정하여 CPU 리소스를 더 효과적으로 격리할 수 있습니다.This setting lets you affinitize a resource pool to one or more schedulers or NUMA nodes for greater isolation of CPU resources. 위의 영업부 및 마케팅 부서 시나리오로 돌아가, 영업부에 더 격리된 환경이 필요하며 항상 CPU 코어의 100%를 사용하려 한다고 가정해 보겠습니다.Using the Sales and Marketing scenario above, lets assume that the Sales department needs a more isolated environment and wants 100 percent of a CPU core at all times. AFFINITY 옵션을 사용하면 영업부 작업과 마케팅 부서 작업을 서로 다른 CPU에 예약할 수 있습니다.By using the AFFINITY option the Sales and Marketing workloads can be scheduled on different CPUs. 마케팅 풀에 대한 CAP_CPU_PERCENT가 설정되어 있다고 가정할 경우 마케팅 부서 작업에는 계속 한 코어의 최대 30%가 사용되지만 영업부 작업에는 다른 코어의 100%가 사용됩니다.Assuming the CAP_CPU_PERCENT on the Marketing pool is still in place, the Marketing workload continues to use a maximum of 30 percent of one core, while the Sales workload uses 100 percent of the other core. 영업부 작업과 마케팅 부서 작업이 관련이 있는 한 두 작업은 격리된 두 시스템에서 실행됩니다.As far as the Sales and Marketing workloads are concerned, they are running on two isolated machines.

  • MIN_IOPS_PER_VOLUME 및 MAX_IOPS_PER_VOLUMEMIN_IOPS_PER_VOLUME and MAX_IOPS_PER_VOLUME

    이 설정은 리소스 풀에 대한 디스크 볼륨당 최소 및 최대 물리적 IOPS(초당 I/O 작업)입니다.These settings are the minimum and maximum physical IO operations per second (IOPS) per disk volume for a resource pool. 이 설정을 사용하면 지정된 리소스 풀의 사용자 스레드에 대해 발생하는 물리적 IO를 제어할 수 있습니다.You can use these settings to control the physical IOs issued for user threads for a given resource pool. 예를 들어 영업부는 몇 가지 월말 보고서를 큰 규모의 일괄 처리로 생성합니다.For example, the Sales department generates several end-of-month reports in large batches. 이러한 일괄 처리의 쿼리는 디스크 볼륨을 포화시키고 데이터베이스에서 우선 순위가 높은 다른 작업의 성능에 영향을 줄 수 있는 IO를 생성할 수 있습니다.The queries in these batches can generate IOs that can saturate the disk volume and impact the performance of other higher priority workloads in the database. 이 작업을 격리하기 위해 영업부 리소스 풀의 MIN_IOPS_PER_VOLUME을 20으로 설정하고 MAX_IOPS_PER_VOLUME을 100으로 설정하여 작업에 대해 발생할 수 있는 IO 수준을 제어할 수 있습니다.To isolate this workload, the MIN_IOPS_PER_VOLUME is set to 20 and the MAX_IOPS_PER_VOLUME is set to 100 for the Sales department resource pool, which controls the level of IOs that can issued for the workload.

    CPU 또는 메모리를 구성할 때 모든 풀의 MIN 값의 합은 서버 리소스의 100%를 초과할 수 없습니다.When configuring CPU or Memory, the sum of MIN values across all pools cannot exceed 100 percent of the server resources. 또한 CPU 또는 메모리를 구성할 때 MAX 및 CAP 값은 MIN과 100%(포함) 사이의 임의 값으로 설정할 수 있습니다.In addition, when configuring CPU or Memory, MAX and CAP values can be set anywhere in the range between MIN and 100 percent inclusive.

    풀에 0이 아닌 MIN이 정의되어 있으면 다른 풀의 유효한 MAX 값이 다시 조정됩니다.If a pool has a nonzero MIN defined, the effective MAX value of other pools is readjusted. 다른 풀의 MIN 값 합계와 풀의 구성된 MAX 값의 최소값을 100%에서 뺍니다.The minimum of the configured MAX value of a pool and the sum of the MIN values of other pools is subtracted from 100 percent.

    다음 표에서는 위의 몇 가지 개념에 대해 설명하고The following table illustrates a few of the preceding concepts. 내부 풀, 기본 풀 및 사용자 정의 풀 두 개에 대한 설정을 보여 줍니다.The table shows the settings for the internal pool, the default pool, and two user-defined pools. 다음 공식은 유효한 MAX % 및 공유 %를 계산하는 데 사용됩니다.The following formulas are used for calculating the effective MAX% and the shared %.

  • Min(X,Y)은 X와 Y 중에서 더 작은 값을 의미합니다.Min(X,Y) means the smaller value of X and Y.

  • Sum(X)은 모든 풀에서 X 값의 합계를 의미합니다.Sum(X) means the sum of value X across all pools.

  • 총 공유 % = 100 - sum(MIN %)Total shared % = 100 - sum(MIN %).

  • 유효한 MAX % = min(X,Y)Effective MAX % = min(X,Y).

  • 공유 % = 유효한 MAX % - MIN %Shared % = Effective MAX % - MIN %.

풀 이름Pool name MIN % 설정MIN % setting MAX % 설정MAX % setting 계산된 유효한 MAX %Calculated effective MAX % 계산된 공유 %Calculated shared % 설명Comment
내부internal 00 100100 100100 00 유효 MAX % 및 공유 %는 내부 풀에 적용할 수 없습니다.Effective MAX% and shared% are not applicable to the internal pool.
기본default 00 100100 3030 3030 유효 MAX 값은 min(100,100-(20+50)) = 30으로 계산됩니다.The effective MAX value is calculated as: min(100,100-(20+50)) = 30. 계산된 공유 백분율(%)은 유효 MAX - MIN = 30입니다.The calculated shared % is effective MAX - MIN = 30.
풀 1Pool 1 2020 100100 5050 3030 유효 MAX 값은 min(100,100-50) = 50으로 계산됩니다.The effective MAX value is calculated as: min(100,100-50) = 50. 계산된 공유 백분율(%)은 유효 MAX - MIN = 30입니다.The calculated Shared % is Effective MAX - MIN = 30.
풀 2Pool 2 5050 7070 7070 2020 유효 MAX 값은 min(70,100-20) = 70으로 계산됩니다.The effective MAX value is calculated as: min(70,100-20) = 70. 계산된 공유 백분율(%)은 유효 MAX - MIN = 20입니다.The calculated Shared % is Effective MAX - MIN = 20.

위의 표를 계속 사용하여 다른 풀이 만들어질 때 수행되는 조정 작업을 보다 자세히 설명할 수 있습니다.Using the preceding table as an example we can further illustrate the adjustments that take place when another pool is created. 이 풀은 풀 3이며 MIN %가 5로 설정되어 있습니다.This pool is Pool 3 and has a MIN % setting of 5.

풀 이름Pool name MIN % 설정MIN % setting MAX % 설정MAX % setting 계산된 유효한 MAX %Calculated effective MAX % 계산된 공유 %Calculated shared % 설명Comment
내부internal 00 100100 100100 00 유효 MAX % 및 공유 %는 내부 풀에 적용할 수 없습니다.Effective MAX % and shared % are not applicable to the internal pool.
기본default 00 100100 2525 2525 유효 MAX 값은 min(100,100-(20+50+5)) = 25로 계산됩니다.The effective MAX value is calculated as: min(100,100-(20+50+5)) = 25. 계산된 공유 백분율(%)은 유효 MAX - MIN = 25입니다.The calculated shared % is Effective MAX - MIN = 25.
풀 1Pool 1 2020 100100 4545 2525 유효 MAX 값은 min(100,100-55) = 45로 계산됩니다.The effective MAX value is calculated as: min(100,100-55) = 45. 계산된 공유 백분율(%)은 유효 MAX - MIN = 25입니다.The calculated Shared % is Effective MAX - MIN = 25.
풀 2Pool 2 5050 7070 7070 2020 유효 MAX 값은 min(70,100-25) = 70으로 계산됩니다.The effective MAX value is calculated as: min(70,100-25) = 70. 계산된 공유 백분율(%)은 유효 MAX - MIN = 20입니다.The calculated Shared % is effective MAX - MIN = 20.
풀 3Pool 3 55 100100 3030 2525 유효 MAX 값은 min(100,100-70) = 30으로 계산됩니다.The effective MAX value is calculated as: min(100,100-70) = 30. 계산된 공유 백분율(%)은 유효 MAX - MIN = 25입니다.The calculated Shared % is effective MAX - MIN = 25.

풀의 공유 부분은 리소스가 사용 가능한 경우 사용 가능한 리소스가 이동할 수 있는 위치를 나타내는 데 사용됩니다.The shared part of the pool is used to indicate where available resources can go if resources are available. 그러나 사용된 리소스는 지정된 풀로 이동하지만 공유되지는 않습니다.However, when resources are consumed they go to the specified pool and are not shared. 따라서 지정된 풀에 요청이 없고 이 풀에 구성된 리소스를 다른 풀에 사용할 수 있는 경우 리소스 활용도가 높아질 수 있습니다.This may improve resource utilization in cases where there are no requests in a given pool and the resources configured to the pool can be freed up for other pools.

다음은 몇 가지 극단적인 풀 구성 사례입니다.Some extreme cases of pool configuration are:

  • 모든 풀은 서버 리소스의 100%를 나타내는 최소값을 정의합니다.All pools define minimums that in total represent 100 percent of the server resources. 이 경우 유효한 최대값은 최소값과 같습니다.In this case the effective maximums are equal to minimums. 이것은 지정된 풀 내부에서 리소스가 소비되는지 여부에 관계없이 서버 리소스를 겹치지 않는 부분으로 분할하는 것과 같습니다.This is equivalent to dividing the server resources into non-overlapping pieces regardless of resources are consumed inside any given pool.

  • 모든 풀은 최소값으로 0을 갖습니다.All pools have zero minimums. 모든 풀은 사용 가능한 리소스를 서로 차지하기 위해 경쟁하며 최종 크기가 각 풀의 리소스 소비에 따라 결정됩니다.All the pools compete for available resources and their final sizes are based on resource consumption in each pool. 정책과 같은 다른 요소는 최종 풀 크기를 구체화하는 데 사용됩니다.Other factors such as policies play a role in shaping the final pool size.

    리소스 관리자는 두 개의 리소스 풀, 내부 풀과 기본 풀을 미리 정의합니다.Resource Governor predefines two resource pools, the internal pool and the default pool. 하지만 풀을 추가할 수도 있습니다.You can add additional pools.

    내부 풀Internal Pool

    내부 풀은 SQL ServerSQL Server 자체에서 소비한 리소스를 나타냅니다.The internal pool represents the resources consumed by the SQL ServerSQL Server itself. 이 풀은 항상 내부 그룹만 포함하며 어떤 식으로든 변경할 수 없습니다.This pool always contains only the internal group, and the pool is not alterable in any way. 내부 풀에서는 리소스를 제한 없이 소비할 수 있습니다.Resource consumption by the internal pool is not restricted. 풀의 모든 작업은 서버가 작동하는 데 있어서 중요한 것으로 간주되며, 리소스 관리자를 사용하면 다른 풀에 설정된 제한을 위반하더라도 다른 풀의 리소스를 내부 풀에 사용할 수 있습니다.Any workloads in the pool are considered critical for server function, and Resource Governor allows the internal pool to pressure other pools even if it means the violation of limits set for the other pools.

참고

내부 풀 및 내부 그룹 리소스 사용량은 전체 리소스 사용량에서 차감되지 않습니다.The internal pool and internal group resource usage is not subtracted from the overall resource usage. 백분율은 사용 가능한 전체 리소스를 기준으로 계산됩니다.Percentages are calculated from the overall resources available.

기본 풀Default Pool

기본 풀은 미리 정의된 첫 번째 사용자 풀입니다.The default pool is the first predefined user pool. 구성에 관계없이 기본 풀은 기본 그룹만 포함합니다.Prior to any configuration the default pool only contains the default group. 기본 풀은 만들거나 삭제할 수는 없지만 변경할 수는 있습니다.The default pool cannot be created or dropped but it can be altered. 기본 풀은 기본 그룹 외에 사용자 정의 그룹을 포함할 수 있습니다.The default pool can contain user-defined groups in addition to the default group. SQL Server 2016SQL Server 2016 (으)로 시작하면 루틴 SQL ServerSQL Server 작업에 대한 기본 리소스 및 R 스크립트 실행과 같은 외부 프로세스에 대한 기본 외부 리소스 풀이 있습니다.Beginning with SQL Server 2016SQL Server 2016 there is a default resource pool for routine SQL ServerSQL Server operations, and a default external resource pool for external processes, such as executing R scripts.

참고

기본 그룹은 변경할 수는 있지만 기본 풀 밖으로 이동할 수는 없습니다.The default group is alterable but it cannot be moved out of the default pool.

외부 풀External Pool

사용자는 외부 풀을 정의하여 외부 프로세스에 대한 리소스를 정의할 수 있습니다.Users can define an external pool to define resources for the external processes. R 서비스의 경우 이는 특히 rterm.exe, BxlServer.exe 및 생성된 다른 프로세스를 관리합니다.For R Services, this specifically governs rterm.exe, BxlServer.exe and other processes spawned by them.

사용자 정의 리소스 풀User-Defined Resource Pools

사용자 정의 리소스 풀은 환경의 특정 작업에 대해 만드는 풀입니다.User-defined resource pools are those that you create for specific workloads in your environment. 리소스 관리자는 리소스 풀을 생성, 변경, 삭제하는 DDL 문을 제공합니다.Resource Governor provides DDL statements for creating, changing, and dropping resource pools.

리소스 풀 태스크Resource Pool Tasks

태스크 설명Task Description 항목Topic
리소스 풀을 만드는 방법에 대해 설명합니다.Describes how to create a resource pool. 리소스 풀 만들기Create a Resource Pool
리소스 풀 설정을 변경하는 방법에 대해 설명합니다.Describes how to change resource pool settings. 리소스 풀 설정 변경Change Resource Pool Settings
리소스 풀을 삭제하는 방법에 대해 설명합니다.Describes how to delete a resource pool. 리소스 풀 삭제Delete a Resource Pool

참고 항목See Also

리소스 관리자 Resource Governor
리소스 관리자 작업 그룹 Resource Governor Workload Group
리소스 관리자 분류자 함수 Resource Governor Classifier Function
템플릿을 사용하여 리소스 관리자 구성 Configure Resource Governor Using a Template
리소스 관리자 속성 보기 View Resource Governor Properties