다음을 통해 공유


CREATE RESOURCE POOL(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

리소스 관리자 리소스 풀을 만듭니다. 리소스 풀은 데이터베이스 엔진 인스턴스의 물리적 리소스(CPU, 메모리 및 IO)의 하위 집합을 나타냅니다. 리소스 관리자를 사용하면 리소스 풀 간에 서버 리소스를 최대 64개까지 예약하거나 제한할 수 있습니다.

리소스 관리자는 SQL Server의 모든 버전에서 사용할 수 없습니다. SQL Server 버전에서 지원하는 기능 목록은 버전 및 SQL Server 2022지원되는 기능을 참조하세요.

메모

Azure SQL Managed Instance의 경우 리소스 관리자 구성을 수정하려면 master 데이터베이스의 컨텍스트에 있어야 합니다.

Transact-SQL 구문 표기 규칙

구문

CREATE RESOURCE POOL pool_name
[ WITH
    (
        [ MIN_CPU_PERCENT = value ]
        [ [ , ] MAX_CPU_PERCENT = value ]
        [ [ , ] CAP_CPU_PERCENT = value ]
        [ [ , ] AFFINITY {SCHEDULER =
                  AUTO
                | ( <scheduler_range_spec> )
                | NUMANODE = ( <NUMA_node_range_spec> )
                } ]
        [ [ , ] MIN_MEMORY_PERCENT = value ]
        [ [ , ] MAX_MEMORY_PERCENT = value ]
        [ [ , ] MIN_IOPS_PER_VOLUME = value ]
        [ [ , ] MAX_IOPS_PER_VOLUME = value ]
    )
]
[;]

<scheduler_range_spec> ::=
{ SCHED_ID | SCHED_ID TO SCHED_ID }[,...n]

<NUMA_node_range_spec> ::=
{ NUMA_node_ID | NUMA_node_ID TO NUMA_node_ID }[,...n]

인수

pool_name

리소스 풀에 대한 사용자 정의 이름입니다. pool_name 영숫자이고, 최대 128자일 수 있으며, 데이터베이스 엔진 인스턴스 내에서 고유해야 하며,데이터베이스 식별자에 대한 규칙을 준수해야 합니다.

MIN_CPU_PERCENT =

CPU 경합이 있을 때 리소스 풀의 모든 요청에 대해 보장되는 평균 CPU 대역폭을 지정합니다. value는 기본 설정이 0인 정수입니다. 허용되는 value의 범위는 0에서 100까지입니다.

MAX_CPU_PERCENT =

CPU 경합이 있을 때 리소스 풀의 모든 요청이 수신하는 최대 평균 CPU 대역폭을 지정합니다. value는 기본 설정이 100인 정수입니다. 허용되는 value의 범위는 1에서 100까지입니다.

CAP_CPU_PERCENT =

적용 대상: SQL Server 2012(11.x) 이상

리소스 풀의 모든 요청이 수신하는 CPU 대역폭의 하드 캡을 지정합니다. 최대 CPU 대역폭 수준을 지정된 값과 동일하게 제한합니다. value는 기본 설정이 100인 정수입니다. 허용되는 value의 범위는 1에서 100까지입니다.

메모

CPU 거버넌스의 통계적 특성으로 인해 CAP_CPU_PERCENT지정된 값을 초과하는 짧은 급증이 가끔 발생할 수 있습니다.

AFFINITY {SCHEDULER = AUTO | ( <scheduler_range_spec> ) | NUMANODE = (<NUMA_node_range_spec>)}

적용 대상: SQL Server 2012(11.x) 이상

리소스 풀을 특정 스케줄러에 연결합니다. 기본값은 AUTO.

AFFINITY SCHEDULER <scheduler_range_spec> 지정하면 리소스 풀이 지정된 ID로 식별된 데이터베이스 엔진 스케줄러로 선호됩니다. 이러한 ID는 sys.dm_os_schedulersscheduler_id 열의 값에 매핑됩니다.

AFFINITY NUMANODE <NUMA_node_range_spec> 지정하면 지정된 NUMA 노드 또는 노드 범위에 해당하는 논리 CPU에 매핑되는 데이터베이스 엔진 스케줄러에 리소스 풀이 선호됩니다. 다음 Transact-SQL 쿼리를 사용하여 실제 NUMA 구성과 데이터베이스 엔진 스케줄러 ID 간의 매핑을 검색할 수 있습니다.

SELECT osn.memory_node_id AS numa_node_id,
       sc.cpu_id,
       sc.scheduler_id
FROM sys.dm_os_nodes AS osn
INNER JOIN sys.dm_os_schedulers AS sc
ON osn.node_id = sc.parent_node_id
   AND
   sc.scheduler_id < 1048576;

MIN_MEMORY_PERCENT =

다른 리소스 풀과 공유할 수 없는 리소스 풀에 예약된 최소 쿼리 작업 영역 메모리 양을 지정합니다. value는 기본 설정이 0인 정수입니다. 허용되는 범위는 0에서 100까지입니다.

MAX_MEMORY_PERCENT =

이 리소스 풀의 요청에서 사용할 수 있는 쿼리 작업 영역 메모리의 최대 양을 지정합니다. value는 기본 설정이 100인 정수입니다. 허용되는 value의 범위는 1에서 100까지입니다.

MIN_IOPS_PER_VOLUME =

적용 대상: SQL Server 2014(12.x) 이상

리소스 풀에 예약할 디스크 볼륨당 최소 IOPS(초당 IO 작업)를 지정합니다. 허용되는 value의 범위는 0에서 2^31-1(2,147,483,647)까지입니다. 풀에 대한 최소값을 나타내려면 0을 지정합니다. 기본값은 0입니다.

MAX_IOPS_PER_VOLUME =

적용 대상: SQL Server 2014(12.x) 이상

리소스 풀에 대해 허용할 디스크 볼륨당 최대 IOPS(초당 IO 작업)를 지정합니다. 허용되는 value의 범위는 0에서 2^31-1(2,147,483,647)까지입니다. 풀에 대한 IOPS 제한을 제거하려면 0을 지정합니다. 기본값은 0입니다.

풀에 대한 MAX_IOPS_PER_VOLUME 0으로 설정된 경우 풀은 IO로 제어되지 않으며 다른 풀이 MIN_IOPS_PER_VOLUME 설정된 경우에도 시스템의 모든 IOPS를 사용할 수 있습니다. 이 경우 이 풀의 MAX_IOPS_PER_VOLUME 값을 높은 숫자(예: 최대값 2^31-1)로 설정하여 이 풀을 IO로 제어하고 다른 풀에 대해 존재할 수 있는 IOPS 예약을 적용하는 것이 좋습니다.

설명

모든 리소스 풀에 대한 MIN_CPU_PERCENT 또는 MIN_MEMORY_PERCENT 합계는 100%를 초과할 수 없습니다.

MIN_IOPS_PER_VOLUMEMAX_IOPS_PER_VOLUME 초당 최소 및 최대 IO를 지정합니다. IO는 읽기 또는 쓰기일 수 있으며 모든 크기일 수 있습니다. 따라서 동일한 IOPS 제한으로 최소 및 최대 IO 처리량은 워크로드의 IO 크기 혼합에 따라 달라질 수 있습니다.

MAX_CPU_PERCENTMAX_MEMORY_PERCENT의 값은 MIN_CPU_PERCENTMIN_MEMORY_PERCENT의 각 값보다 크거나 같아야 합니다.

CAP_CPU_PERCENT는 풀과 연결된 워크로드가 MAX_CPU_PERCENT의 값보다 큰 값이 아닌 MAX_CPU_PERCENT 값보다 큰 CPU 용량(사용 가능한 경우)을 사용할 수 있다는 점에서 CAP_CPU_PERCENT와 다릅니다. CAP_CPU_PERCENT보다 짧은 급증이 있을 수 있지만 추가 CPU 용량을 사용할 수 있는 경우에도 워크로드는 장시간 CAP_CPU_PERCENT 초과할 수 없습니다.

선호도가 높은 각 구성 요소(스케줄러 또는 NUMA 노드)의 총 CPU 비율은 100%를 초과할 수 없습니다.

자세한 내용은 Resource GovernorResource Governor 리소스 풀참조하세요.

사용 권한

CONTROL SERVER 권한이 필요합니다.

예제

추가 리소스 관리자 구성 예제는 Resource Governor 구성 예제 및모범 사례를 참조하세요.

리소스 풀 만들기

이 예제에서는 bigPool리소스 풀을 만들었습니다. 이 풀은 기본 리소스 관리자 설정을 사용합니다.

CREATE RESOURCE POOL bigPool;
ALTER RESOURCE GOVERNOR RECONFIGURE;

CPU 및 메모리 예약 및 제한 설정

이 예제에서는 다음과 같이 adhocPool 리소스 풀을 구성합니다.

  • 각각 MIN_CPU_PERCENTMIN_MEMORY_PERCENT 사용하여 CPU의 10%와 쿼리 작업 영역 메모리의 5%를 예약합니다.
  • MAX_MEMORY_PERCENT사용하여 15% 쿼리 작업 영역 메모리 제한을 설정합니다.
  • 각각 MAX_CPU_PERCENTCAP_CPU_PERCENT 사용하여 20% 소프트 CPU 한도를 30% 하드 CPU 한도로 설정합니다.
  • AFFINITY SCHEDULER사용하여 풀을 논리 CPU의 두 범위(0~63 및 128~191)로 Affinitize합니다.

적용 대상: SQL Server 2012(11.x) 이상

CREATE RESOURCE POOL adhocPool
WITH (
     MIN_CPU_PERCENT = 10,
     MAX_CPU_PERCENT = 20,
     CAP_CPU_PERCENT = 30,
     MIN_MEMORY_PERCENT = 5,
     MAX_MEMORY_PERCENT = 15,
     AFFINITY SCHEDULER = (0 TO 63, 128 TO 191)
     );

IOPS 예약 및 제한 설정

이 예제에서는 MIN_IOPS_PER_VOLUME사용하여 볼륨당 200 IOPS를 예약하고 MAX_IOPS_PER_VOLUME사용하여 볼륨당 IOPS를 1000으로 제한합니다. 이러한 값은 리소스 풀을 사용하는 요청에 사용할 수 있는 총 실제 I/O 읽기 및 쓰기 작업을 제어합니다.

적용 대상: SQL Server 2014(12.x) 이상

CREATE RESOURCE POOL PoolAdmin
WITH (
     MIN_IOPS_PER_VOLUME = 200,
     MAX_IOPS_PER_VOLUME = 1000
     );