다음을 통해 공유


자습서: 리소스 관리자 구성 예제 및 모범 사례

적용 대상:SQL ServerAzure SQL Managed Instance

이 문서에는 리소스 관리자를 구성하고 구성이 예상대로 작동하는지 확인하는 데 도움이 되는 연습 예제가 포함되어 있습니다. 간단한 예제로 시작하고 더 복잡한 예제로 진행합니다.

또한 이 문서에는 모니터링 쿼리를 리소스 관리자의 예제와모범 사례를 리소스 관리자 목록이 포함되어 있습니다.

모든 예제에서는 처음에 리소스 관리자가 비활성화되고 기본 설정을 사용하며 사용자 정의 리소스 풀, 워크로드 그룹 및 분류자 함수가 없다고 가정합니다.

메모

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

기본 그룹 수정

이 예제에서는 리소스 관리자를 사용하여 모든 사용자 쿼리에 대한 메모리 부여의 최대 크기를 제한합니다. 이 작업은 default 워크로드 그룹에 대한 REQUEST_MAX_MEMORY_GRANT_PERCENT 설정을 기본 25%에서 10%으로 줄여 수행합니다. 이 예제에서는 분류자 함수사용하지 않습니다. 즉, 로그인 처리는 영향을 받지 않으며 모든 사용자 세션은 default 워크로드 그룹에서 계속 분류됩니다.

다른 쿼리가 너무 많은 메모리를 차지하여 쿼리가 메모리를 기다리는 경우 메모리 할당 크기를 제한해야 할 수 있습니다. 자세한 내용은 SQL Server메모리 부여로 인한 성능 저하 또는 메모리 부족 문제 해결을 참조하세요.

  1. 기본 워크로드 그룹을 수정합니다.

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);
    
  2. 리소스 관리자가 구성을 효과적으로 수행할 수 있도록 합니다.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  3. 메모리 부여의 새 최대 크기를 포함하여 새 설정의 유효성을 검사합니다.

    SELECT group_id,
           wg.name AS workload_group_name,
           rp.name AS resource_pool_name,
           wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_percent,
           rp.max_memory_kb * wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_size_kb
    FROM sys.resource_governor_workload_groups AS wg
    INNER JOIN sys.dm_resource_governor_resource_pools AS rp
    ON wg.pool_id = rp.pool_id;
    
  4. 초기 구성으로 되돌리려면 다음 스크립트를 실행합니다.

    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 25);
    

사용자 정의 워크로드 그룹 사용

이 예제에서는 리소스 관리자를 사용하여 특정 애플리케이션 이름을 가진 세션의 모든 요청이 DOP(병렬 처리 수준)가 4보다 높은 상태에서 실행되지 않도록 합니다. 이 작업은 MAX_DOP 설정이 4로 설정된 워크로드 그룹으로 세션을 분류하여 수행됩니다.

최대 병렬 처리 수준을 구성하는 방법에 대한 자세한 내용은 Server 구성: 최대 병렬 처리 수준참조하세요.

  1. DOP를 제한하는 워크로드 그룹을 만듭니다. 이 그룹은 특정 애플리케이션에 대해 DOP만 제한하려고 하지만 CPU, 메모리 또는 I/O 리소스를 예약하거나 제한하지 않기 때문에 default 리소스 풀을 사용합니다.

    CREATE WORKLOAD GROUP limit_dop
    WITH (
         MAX_DOP = 4
         )
    USING [default];
    
  2. 분류자 함수를 만듭니다. 이 함수는 기본 제공 APP_NAME() 함수를 사용하여 클라이언트 연결 문자열에 지정된 애플리케이션 이름을 확인합니다. 애플리케이션 이름이 limited_dop_application설정되면 함수는 DOP를 제한하는 워크로드 그룹의 이름을 반환합니다. 그렇지 않으면 함수는 워크로드 그룹 이름으로 default 반환합니다.

    USE master;
    GO
    
    CREATE FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    IF APP_NAME() = N'limited_dop_application'
        SELECT @WorkloadGroupName = N'limit_dop';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  3. 리소스 관리자 구성을 수정하여 구성을 효과적으로 만들고 리소스 관리자를 사용하도록 설정합니다.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  4. 쿼리 sys.resource_governor_configuration 리소스 관리자가 사용하도록 설정되어 있고 우리가 만든 분류자 함수를 사용하고 있는지 확인합니다.

    SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
           OBJECT_NAME(classifier_function_id) AS classifier_object_name,
           is_enabled
    FROM sys.resource_governor_configuration;
    
    classifier_schema_name      classifier_object_name      is_enabled
    ----------------------      ----------------------      ----------
    dbo                         rg_classifier               1
    
  5. 특정 애플리케이션 이름을 가진 세션이 limit_dop 워크로드 그룹으로 분류되고 다른 세션은 default 워크로드 그룹에서 계속 분류되는지 확인합니다. sys.dm_exec_sessionssys.resource_governor_workload_groups 시스템 뷰를 사용하여 현재 세션의 애플리케이션 이름 및 워크로드 그룹 이름을 반환하는 쿼리를 사용합니다.

    1. SQL Server Management Studio(SSMS)의 주 메뉴에서 파일을 선택한 후, 데이터베이스 엔진 쿼리를 선택하십시오.

    2. 데이터베이스 엔진에 연결 대화 상자에서 워크로드 그룹과 분류자 함수를 만든 동일한 데이터베이스 엔진 인스턴스를 지정합니다. 추가 연결 매개 변수 탭을 선택하고 App=limited_dop_application입력합니다. 따라서 SSMS는 인스턴스에 연결할 때 limited_dop_application 애플리케이션 이름으로 사용합니다.

    3. 선택 후 연결하여 새 연결을 엽니다.

    4. 동일한 쿼리 창에서 다음 쿼리를 실행합니다.

      SELECT s.program_name AS application_name,
             wg.name AS workload_group_name,
             wg.max_dop
      FROM sys.dm_exec_sessions AS s
      INNER JOIN sys.resource_governor_workload_groups AS wg
      ON s.group_id = wg.group_id
      WHERE s.session_id = @@SPID;
      

      세션이 최대 DOP가 4로 설정된 limit_dop 워크로드 그룹으로 분류되었음을 보여 주는 다음 출력이 표시됩니다.

      application_name            workload_group_name     max_dop
      ----------------            -------------------     -------
      limited_dop_application     limit_dop               4
      
    5. 위의 단계를 반복하지만 추가 연결 매개 변수 탭의 상자에 아무것도 입력하지 마세요. 출력이 변경되어 기본 SSMS 애플리케이션 이름 및 최대 DOP에 대한 기본 0 값이 있는 default 워크로드 그룹이 표시됩니다.

      application_name                                    workload_group_name     max_dop
      ----------------                                    -------------------     -------
      Microsoft SQL Server Management Studio - Query      default                 0
      
  6. 이 샘플의 초기 구성으로 되돌리려면 다음 T-SQL 스크립트를 실행합니다.

    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    DROP WORKLOAD GROUP limit_dop;
    

여러 리소스 풀 및 워크로드 그룹 사용

이 예제에서는 리소스 관리자를 사용하여 주문 처리 애플리케이션에서 하루 중 시간에 따라 다른 워크로드 그룹 및 리소스 풀로 세션을 분류합니다. 이 구성은 사용량이 많은 처리 시간 동안 애플리케이션에 더 많은 리소스를 할당하고, 오프타임 동안 해당 리소스를 제한합니다. 이 예제에서는 애플리케이션이 장기 실행 세션을 사용하지 않는다고 가정합니다.

  1. 사용량이 많은 시간대와 사용량이 적은 시간대의 처리를 위해 두 개의 리소스 풀을 만듭니다.

    • peak_hours_pool 풀은 MIN_CPU_PERCENT을 통해 최소 20%의 평균 CPU 대역폭을 보장하며, MAX_CPU_PERCENT100로 설정함으로써 CPU 대역폭을 제한하지 않습니다.
    • off_hours_pool 풀은 MIN_CPU_PERCENT0설정하여 CPU 대역폭을 예약하지 않지만 MAX_CPU_PERCENT50설정하여 CPU 경합이 있을 때 CPU 대역폭을 50%로 제한합니다.
    CREATE RESOURCE POOL peak_hours_pool
    WITH (
         MIN_CPU_PERCENT = 20,
         MAX_CPU_PERCENT = 100
         );
    
    CREATE RESOURCE POOL off_hours_pool
    WITH (
         MIN_CPU_PERCENT = 0,
         MAX_CPU_PERCENT = 50
         );
    

    리소스 풀은 CPU, 메모리 및 I/O와 같은 시스템 리소스를 예약하고 제한할 수 있습니다. 자세한 내용은 CREATE RESOURCE POOL참조하세요.

  2. 각각 각 리소스 풀에 대해 하나씩 두 개의 워크로드 그룹을 만듭니다.

    • peak_hours_groupGROUP_MAX_REQUESTS을 기본값인 0로 설정함으로써 동시 요청 수를 제한하지 않습니다.
    • off_hours_groupGROUP_MAX_REQUESTS200로 설정함으로써 이 그룹으로 분류된 모든 세션의 동시 요청 수를 제한합니다.
    CREATE WORKLOAD GROUP peak_hours_group
    WITH (
         GROUP_MAX_REQUESTS = 0
         )
    USING peak_hours_pool;
    
    CREATE WORKLOAD GROUP off_hours_group
    WITH (
         GROUP_MAX_REQUESTS = 200
         )
    USING off_hours_pool;
    

    워크로드 그룹은 최대 요청 수, 최대 병렬 처리 수준 및 최대 메모리 부여 크기와 같은 정책을 정의합니다. 자세한 내용은 CREATE WORKLOAD GROUP을 참조하세요.

  3. 최대 및 비사용 시간 간격을 정의하는 테이블을 만들고 채우세요.

    • 테이블의 각 행은 간격의 시작 및 종료 시간과 간격 동안 사용할 워크로드 그룹의 이름을 정의합니다.
    • 각 간격의 시작 및 종료 시간은 포함됩니다.
    • 테이블은 스키마 바인딩된 분류자 함수에서 사용할 수 있도록 master 데이터베이스에 만들어집니다.
    USE master;
    GO
    
    CREATE TABLE dbo.workload_interval
    (
    workload_group_name sysname NOT NULL,
    start_time time(7) NOT NULL,
    end_time time(7) NOT NULL,
    CONSTRAINT pk_workload_interval PRIMARY KEY (start_time, workload_group_name),
    CONSTRAINT ak_workload_interval_1 UNIQUE (end_time, workload_group_name),
    CONSTRAINT ck_workload_interval_1 CHECK (start_time < end_time)
    );
    GO
    
    INSERT INTO dbo.workload_interval
    VALUES (N'off_hours_group', '00:00', '06:29:59.9999999'),
           (N'peak_hours_group', '06:30', '18:29:59.9999999'),
           (N'off_hours_group', '18:30', '23:59:59.9999999');
    
  4. 분류자 함수를 만듭니다.

    • 테이블의 데이터에는 지정된 시간 동안 일치하는 단일 행이 있어야 합니다. 데이터가 해당 규칙을 위반하는 경우 함수는 워크로드 그룹 이름으로 default 반환합니다.
    • 다음 예제 함수는 기본 제공 APP_NAME() 함수에서 반환된 애플리케이션 이름이 order_processing이외의 경우 default 반환합니다.
    USE master;
    GO
    
    CREATE OR ALTER FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    SELECT @WorkloadGroupName = workload_group_name
    FROM dbo.workload_interval
    WHERE APP_NAME() = N'order_processing'
          AND
          CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time;
    
    IF @@ROWCOUNT > 1
        SELECT @WorkloadGroupName = N'default';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  5. 선택적 단계입니다. master 데이터베이스에서 테이블을 만드는 대신 테이블 반환 생성자 사용하여 분류자 함수에서 직접 시간 간격을 정의할 수 있습니다. 이는 데이터 크기가 작고 분류자 함수 조건이 자주 변경되지 않는 경우에 권장되는 방법입니다. 다음은 master테이블 대신 테이블 값을 반환하는 생성자를 사용하는 동일한 분류자의 예입니다.

    USE master;
    GO
    
    CREATE OR ALTER FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    SELECT @WorkloadGroupName = workload_group_name
    FROM (
         VALUES (CAST(N'off_hours_group' AS sysname),  CAST('00:00' AS time(7)), CAST('06:29:59.9999999' AS time(7))),
                (CAST(N'peak_hours_group' AS sysname), CAST('06:30' AS time(7)), CAST('18:29:59.9999999' AS time(7))),
                (CAST(N'off_hours_group' AS sysname),  CAST('18:30' AS time(7)), CAST('23:59:59.9999999'AS time(7)))
         ) AS wg (workload_group_name, start_time, end_time)
    WHERE APP_NAME() = N'order_processing'
          AND
          CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time;
    
    IF @@ROWCOUNT > 1
        SELECT @WorkloadGroupName = N'default';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  6. 리소스 관리자 구성을 수정하여 구성을 효과적으로 만들고 리소스 관리자를 사용하도록 설정합니다.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  7. 리소스 관리자가 활성화되어 있고, 지정된 분류자 함수를 사용하고 있으며, 이전 예제유사한 단계를 사용하여 분류자 함수가 예상대로 작동하는지 확인합니다. 이번에는 SSMS 연결 대화 상자의 추가 연결 매개 변수 탭에 App=order_processing을 입력하여, 분류자 함수에서 애플리케이션 이름과 일치하도록 합니다. 다음 쿼리를 실행하여 현재 세션에 대한 애플리케이션 이름, 워크로드 그룹, 리소스 풀 및 CPU 예약 및 제한을 확인합니다.

    SELECT s.program_name AS application_name,
           wg.name AS workload_group_name,
           wg.group_max_requests,
           rp.name AS resource_pool_name,
           rp.min_cpu_percent,
           rp.max_cpu_percent
    FROM sys.dm_exec_sessions AS s
    INNER JOIN sys.resource_governor_workload_groups AS wg
    ON s.group_id = wg.group_id
    INNER JOIN sys.resource_governor_resource_pools AS rp
    ON wg.pool_id = rp.pool_id
    WHERE s.session_id = @@SPID;
    

    결과는 하루 중 시간에 따라 달라집니다. 예를 들어 현재 시간이 14:30인 경우 결과는 peak_hours_grouppeak_hours_pool 사용됨을 보여줍니다.

    application_name    workload_group_name     group_max_requests      resource_pool_name      min_cpu_percent     max_cpu_percent
    -----------------   --------------------    ------------------      -------------------     ---------------     ---------------
    order_processing    peak_hours_group        0                       peak_hours_pool         20                  100
    
  8. 초기 구성으로 되돌리려면 다음 T-SQL 스크립트를 실행합니다.

    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    DROP TABLE IF EXISTS dbo.workload_interval;
    DROP WORKLOAD GROUP peak_hours_group;
    DROP WORKLOAD GROUP off_hours_group;
    DROP RESOURCE POOL peak_hours_pool;
    DROP RESOURCE POOL off_hours_pool;
    

시스템 보기를 사용하여 리소스 관리자 모니터링

이 섹션의 예제 쿼리는 리소스 관리자 런타임 통계 및 동작을 모니터링하는 방법을 보여 줍니다.

리소스 관리자 통계는 마지막 서버가 다시 시작된 이후 누적됩니다. 특정 시간부터 통계를 수집해야 하는 경우 ALTER RESOURCE GOVERNOR RESET STATISTICS 문을 사용하여 통계를 다시 설정할 수 있습니다.

리소스 풀 런타임 통계

각 리소스 풀에 대해 리소스 관리자는 CPU 및 메모리 사용률, 메모리 부족 이벤트, 메모리 부여, I/O 및 기타 통계를 추적합니다. 자세한 내용은 sys.dm_resource_governor_resource_pools을 참조하십시오.

다음 쿼리는 모든 리소스 풀에 대해 사용 가능한 통계의 하위 집합을 반환합니다.

SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;

워크로드 그룹 런타임 통계

각 워크로드 그룹에 대해 리소스 관리자는 CPU 시간, 요청 수, 차단된 작업, 잠금 대기 시간, 쿼리 최적화 및 기타 통계를 추적합니다. 자세한 내용은 sys.resource_governor_workload_groups참고하십시오.

다음 쿼리는 모든 워크로드 그룹에 대해 사용 가능한 통계의 하위 집합을 반환합니다.

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       wg.statistics_start_time,
       wg.total_request_count,
       wg.total_cpu_usage_ms,
       wg.blocked_task_count,
       wg.total_lock_wait_time_ms,
       wg.total_query_optimization_count,
       wg.max_request_grant_memory_kb,
       wg.active_parallel_thread_count,
       wg.effective_max_dop,
       wg.request_max_memory_grant_percent_numeric
FROM sys.dm_resource_governor_workload_groups AS wg
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id

워크로드 그룹 및 세션 특성별 세션 집계

다음 쿼리는 워크로드 그룹 전체의 세션 분포를 반환하고 각 워크로드 그룹에 대한 세션 통계를 집계합니다.

preconnect 상태의 세션 수가 많을수록 분류자 실행 속도가 느려질 수 있습니다.

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       s.program_name AS application_name,
       s.login_name,
       s.host_name,
       s.status,
       d.name AS database_name,
       MIN(s.login_time) AS first_login_time,
       MAX(s.login_time) AS last_login_time,
       MAX(s.last_request_start_time) AS last_request_start_time,
       COUNT(1) AS session_count
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON s.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON s.database_id = d.database_id
GROUP BY wg.name,
         rp.name,
         s.program_name,
         s.login_name,
         s.host_name,
         s.status,
         d.name;

워크로드 그룹 및 요청 특성별 요청 집계

다음 쿼리는 워크로드 그룹에 대한 요청 분포를 반환하고 각 워크로드 그룹에 대한 요청 통계를 집계합니다.

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       r.command,
       r.status,
       d.name AS database_name,
       COUNT(1) AS request_count,
       MIN(r.start_time) AS first_request_start_time,
       MAX(r.start_time) AS last_request_start_time,
       SUM(CAST(r.total_elapsed_time AS bigint)) AS total_elapsed_time_ms
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON r.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON r.database_id = d.database_id
GROUP BY wg.name,
         rp.name,
         r.command,
         r.status,
         d.name;

리소스 관리자 모범 사례

  • DAC(전용 관리자 연결)를 구성하고 사용하는 방법을 알아봅니다. 자세한 내용은 데이터베이스 관리자용 진단 연결을 참조하세요. 리소스 관리자 구성이 오작동하는 경우 DAC를 사용하여 문제를 해결하거나 리소스 관리자사용하지 않도록 수 있습니다.
  • 리소스 풀을 구성할 때 MIN_CPU_PERCENT, MIN_MEMORY_PERCENTMIN_IOPS_PER_VOLUME에 큰 값을 지정하는 데 주의하세요. MIN 구성 설정은 리소스 풀에 대한 리소스를 예약하고 default 풀을 포함한 다른 리소스 풀에서 사용할 수 없게 만듭니다. 자세한 내용은 리소스 풀만들기를 참조하세요.
  • 분류자 함수는 로그인 처리 시간을 연장합니다. 특히 쿼리가 큰 테이블을 사용하는 경우 분류자에서 복잡한 논리 및 장기 실행 또는 리소스 집약적 쿼리를 피합니다. 지나치게 복잡한 함수는 로그인 지연 또는 연결 시간 제한을 일으킬 수 있습니다.
  • 분류자에서 테이블을 사용해야 하는데 테이블이 작고 대부분 정적인 경우 이 문서의 앞부분에서 예제와 같이 테이블 반환 생성자 대신 사용하는 것이 좋습니다.
  • 분류자에서 자주 수정된 테이블을 사용하지 않습니다. 그러면 로그인을 지연시키고 연결 시간 제한을 유발할 수 있는 차단 위험이 증가합니다. 다음 해결 방법은 위험을 완화할 수 있지만 잘못된 분류의 위험을 포함하여 단점이 있습니다.
    • NOLOCK 테이블 힌트 또는 동등한 READUNCOMMITTED 힌트를 사용하는 것이 좋습니다. 자세한 내용은 READUNCOMMITTED참조하세요.
    • 분류자 함수의 시작 부분에 LOCK_TIMEOUT 설정을 사용하여 1,000밀리초와 같은 낮은 값으로 설정하는 것이 좋습니다. 자세한 내용은 SET LOCK_TIMEOUT참조하세요.
  • 리소스 관리자 구성에서 참조되는 동안에는 분류자 함수를 수정할 수 없습니다. 그러나 다른 분류자 함수를 사용하도록 구성을 수정할 수 있습니다. 분류자를 변경하려면 분류자 함수 쌍을 만드는 것이 좋습니다. 예를 들어 dbo.rg_classifier_A()dbo.rg_classifier_B()을 만들 수 있습니다. 분류자 논리를 변경해야 하는 경우 다음 단계를 수행합니다.
    1. ALTER FUNCTION 문을 사용하여 함수 변경 내용을 현재 리소스 관리자 구성에 사용되지.
    2. ALTER RESOURCE GOVERNOR 문을 사용하여 수정된 분류자를 활성화한 다음 리소스 관리자를 다시 구성합니다. 예를 들어:
      ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B);
      ALTER RESOURCE GOVERNOR RECONFIGURE;
      
    3. 변경이 다시 필요한 경우 다른 함수(dbo.rg_classifier_A())를 사용하여 동일한 단계를 수행합니다.
  • 리소스 관리자 구성은 master 데이터베이스에 저장됩니다. 주기적으로 master을 백업하고, 복원하는 방법을 알고 있어야 합니다. 자세한 내용은 백업 및 복원: 시스템 데이터베이스참조하세요. master복원하는 데는 제한 사항이 있으므로 리소스 관리자 구성 스크립트의 복사본도 별도로 저장하는 것이 좋습니다. master 데이터베이스를 다시 빌드해야 하는 경우 스크립트에서 리소스 관리자 구성을 다시 만들 수 있습니다.