Compartilhar via


Tutorial: Exemplos de configuração do administrador de recursos e práticas recomendadas

aplica-se a:sql serverinstância gerenciada de SQL do Azure

Este artigo contém exemplos passo a passo para ajudá-lo a configurar o administrador de recursos e validar se sua configuração funciona conforme o esperado. Ele começa com um exemplo simples e progride para os mais complexos.

O artigo também inclui exemplos de consultas de monitoramento do Governador de Recursos e uma lista de práticas recomendadas do Governador de Recursos .

Todos os exemplos pressupõem que, inicialmente, o administrador de recursos está desabilitado e usa configurações padrão e que não existem pools de recursos definidos pelo usuário, grupos de carga de trabalho e funções de classificador.

Nota

Para modificar a configuração do administrador de recursos na Instância Gerenciada de SQL do Azure, você deve estar no contexto do banco de dados master na réplica primária.

Modificar o grupo padrão

Este exemplo usa o administrador de recursos para limitar o tamanho máximo de uma concessão de memória para todas as consultas de usuário. Isso é feito ao reduzir a configuração de REQUEST_MAX_MEMORY_GRANT_PERCENT do grupo de trabalho default, passando do valor padrão de 25% para 10%. O exemplo não usa uma função de classificador . Isso significa que o processamento de logon não é afetado e todas as sessões de usuário continuam a ser classificadas no grupo de carga de trabalho default.

Talvez seja necessário limitar o tamanho das concessões de memória se as consultas estiverem aguardando memória porque outras consultas reservaram muita memória. Para obter mais informações, consulte Resolução de problemas de desempenho lento ou pouca memória causados por concessões de memória no SQL Server.

  1. Modifique o grupo de carga de trabalho padrão.

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);
    
  2. Habilite o administrador de recursos para tornar nossa configuração eficaz.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  3. Valide a nova configuração, incluindo o novo tamanho máximo de uma concessão de memória.

    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. Para reverter para a configuração inicial, execute o seguinte script:

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

Usar um grupo de carga de trabalho definido pelo usuário

Este exemplo usa o administrador de recursos para garantir que todas as solicitações em sessões com um nome de aplicativo específico não sejam executadas com o grau de paralelismo (DOP) maior que quatro. Isso é feito classificando as sessões em um grupo de carga de trabalho com a configuração de MAX_DOP definida como 4.

Para obter mais informações sobre como configurar o grau máximo de paralelismo, consulte Configuração do servidor: grau máximo de paralelismo.

  1. Crie um grupo de carga de trabalho que limite o DOP. O grupo usa o pool de recursos default porque só queremos limitar o DOP para um aplicativo específico, mas não reservar ou limitar recursos de CPU, memória ou E/S.

    CREATE WORKLOAD GROUP limit_dop
    WITH (
         MAX_DOP = 4
         )
    USING [default];
    
  2. Crie a função de classificador. A função usa a função APP_NAME() interna para determinar o nome do aplicativo especificado na cadeia de conexão do cliente. Se o nome do aplicativo estiver definido como limited_dop_application, a função retornará o nome do grupo de carga de trabalho que limita o DOP. Caso contrário, a função retornará default como o nome do grupo de carga de trabalho.

    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. Modifique a configuração do administrador de recursos para tornar nossa configuração eficaz e habilite o administrador de recursos.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  4. consulta sys.resource_governor_configuration para validar se o administrador de recursos está habilitado e está usando a função de classificador que criamos.

    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. Valide se as sessões com um nome de aplicativo específico são classificadas no grupo de carga de trabalho limit_dop, enquanto outras sessões continuam a ser classificadas no grupo de carga de trabalho default. Usaremos uma consulta que utiliza as exibições de sistema sys.dm_exec_sessions e sys.resource_governor_workload_groups para retornar o nome do aplicativo e o nome do grupo de carga de trabalho da sessão atual.

    1. No SSMS (SQL Server Management Studio), selecione Arquivo no menu principal, Novo, Consulta do Mecanismo de Banco de Dados.

    2. Na caixa de diálogo Conectar ao Mecanismo de Banco de Dados, especifique a mesma instância do Mecanismo de Banco de Dados em que você criou o grupo de carga de trabalho e a função de classificador. Selecione a guia Parâmetros de Conexão Adicionais e insira App=limited_dop_application. Isso faz com que o SSMS use limited_dop_application como o nome do aplicativo ao se conectar à instância.

    3. Selecione Conectar para abrir uma nova conexão.

    4. Na mesma janela de consulta, execute a seguinte consulta:

      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;
      

      Você deverá ver a seguinte saída, mostrando que a sessão foi classificada no grupo de carga de trabalho limit_dop com o DOP máximo definido como quatro:

      application_name            workload_group_name     max_dop
      ----------------            -------------------     -------
      limited_dop_application     limit_dop               4
      
    5. Repita as etapas acima, mas não insira nada na caixa na guia Parâmetros de Conexão Adicionais. A saída muda, exibindo o nome padrão do aplicativo SSMS e o grupo de carga de trabalho default com o valor padrão 0 para o DOP máximo.

      application_name                                    workload_group_name     max_dop
      ----------------                                    -------------------     -------
      Microsoft SQL Server Management Studio - Query      default                 0
      
  6. Para reverter para a configuração inicial deste exemplo, desconecte todas as sessões usando o grupo de carga de trabalho limit_dop e execute o script T-SQL a seguir. O script inclui as seguintes etapas:

    1. Desabilite o administrador de recursos para que a função de classificador possa ser descartada.
    2. Descarte o grupo de carga de trabalho. Isso requer que nenhuma sessão esteja usando esse grupo de carga de trabalho.
    3. Reconfigure o administrador de recursos para recarregar a configuração efetiva sem a função de classificador e o grupo de carga de trabalho. Isso habilita o administrador de recursos.
    4. Desabilite o administrador de recursos para reverter para a configuração inicial.
    /* Disable resource governor so that the classifier function can be dropped. */
    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    
    /* Drop the workload group. This requires that no sessions are using this workload group. */
    DROP WORKLOAD GROUP limit_dop;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and the workload group. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

Utilize vários pools de recursos e grupos de carga de trabalho

Este exemplo usa o administrador de recursos para classificar sessões de um aplicativo de processamento de pedidos em diferentes grupos de carga de trabalho e pools de recursos, dependendo da hora do dia. Essa configuração aloca mais recursos para o aplicativo durante os horários de pico de processamento e limita seus recursos durante as horas de folga. O exemplo pressupõe que o aplicativo não use sessões de execução prolongada.

  1. Crie dois pools de recursos para o processamento de horários de pico e de folga.

    • O pool peak_hours_pool garante (reserva) um mínimo de 20% da largura de banda média da CPU por meio de MIN_CPU_PERCENT e não limita a largura de banda da CPU definindo MAX_CPU_PERCENT como 100.
    • O pool de off_hours_pool não reserva nenhuma largura de banda da CPU definindo MIN_CPU_PERCENT como 0, mas limita a largura de banda da CPU a 50% quando a contenção da CPU está presente definindo MAX_CPU_PERCENT como 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
         );
    

    Os pools de recursos podem reservar e limitar recursos do sistema, como CPU, memória e E/S. Para obter mais informações, consulte CREATE RESOURCE POOL.

  2. Crie dois grupos de carga de trabalho, um para cada pool de recursos, respectivamente.

    • O peak_hours_group não limita o número de solicitações simultâneas definindo GROUP_MAX_REQUESTS para o valor padrão de 0.
    • O off_hours_group limita o número de solicitações simultâneas em todas as sessões classificadas nesse grupo, definindo GROUP_MAX_REQUESTS como 200.
    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;
    

    Os grupos de carga de trabalho definem políticas como o número máximo de solicitações, o grau máximo de paralelismo e o tamanho máximo de concessão de memória. Para obter mais informações, consulte CREATE WORKLOAD GROUP.

  3. Crie e preencha uma tabela que define os intervalos de tempo de pico e de horas de folga.

    • Cada linha na tabela define a hora de início e término do intervalo e o nome do grupo de carga de trabalho a ser usado durante o intervalo.
    • A hora de início e término de cada intervalo é inclusiva.
    • A tabela é criada no banco de dados master para que possa ser usada em uma função de classificador associada ao esquema.
    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. Crie a função de classificador.

    • Espera-se que os dados na tabela tenham uma única linha correspondente para qualquer hora do dia. Se os dados violarem essa regra, a função retornará default como o nome do grupo de carga de trabalho.
    • A função de exemplo a seguir também retornará default se o nome do aplicativo retornado pela função APP_NAME() interna for diferente de order_processing.
    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. Esta é uma etapa opcional. Em vez de criar uma tabela no banco de dados master, você pode usar um construtor com valor de tabela para definir os intervalos de tempo diretamente na função de classificador. Essa é a abordagem recomendada quando o tamanho dos dados é pequeno e os critérios de função do classificador não são alterados com frequência. Aqui está um exemplo do mesmo classificador que usa um construtor com valor de tabela em vez de uma tabela em 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. Modifique a configuração do administrador de recursos para tornar nossa configuração eficaz e habilite o administrador de recursos.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  7. Valide se o administrador de recursos está habilitado, está usando a função de classificador especificada e se a função de classificador funciona conforme o esperado usando etapas semelhantes à exemplo anterior. Desta vez, inserimos App=order_processing na guia Parâmetros de Conexão Adicionais na caixa de diálogo de conexão do SSMS para corresponder ao nome do aplicativo na função de classificador. Execute a consulta a seguir para determinar o nome do aplicativo, o grupo de carga de trabalho, o pool de recursos e a reserva e o limite da CPU para a sessão atual:

    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;
    

    Os resultados dependem da hora do dia. Por exemplo, se a hora atual for 14:30, o resultado mostrará que peak_hours_group e peak_hours_pool são usados:

    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. Para reverter para a configuração inicial deste exemplo, desconecte todas as sessões usando os grupos de carga de trabalho peak_hours_group e off_hours_group e execute o script T-SQL a seguir. O script inclui as seguintes etapas:

    1. Desabilite o administrador de recursos para que a função de classificador possa ser descartada.
    2. Descarte os grupos de carga de trabalho. Isso requer que nenhuma sessão esteja usando esses grupos de carga de trabalho.
    3. Depois que os grupos de carga de trabalho forem descartados, remova os pools de recursos.
    4. Reconfigure o administrador de recursos para recarregar a configuração efetiva sem a função de classificador e grupos de carga de trabalho e pools de recursos definidos pelo usuário. Isso habilita o administrador de recursos.
    5. Desabilite o administrador de recursos para reverter para a configuração inicial.
    /* Disable resource governor so that the classifier function can be dropped. */
    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 the workload groups. This requires that no sessions are using these workload groups. */
    DROP WORKLOAD GROUP peak_hours_group;
    DROP WORKLOAD GROUP off_hours_group;
    
    /* Once the workload groups are dropped, drop the resource pools. */
    DROP RESOURCE POOL peak_hours_pool;
    DROP RESOURCE POOL off_hours_pool;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and user-defined workload groups and resource pools. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

Monitorar o Resource Governor usando exibições do sistema

As consultas de exemplo nesta seção mostram como você pode monitorar as estatísticas e o comportamento do runtime do administrador de recursos.

As estatísticas do administrador de recursos são cumulativas desde a última reinicialização do servidor. Se você precisar coletar estatísticas a partir de um determinado momento, poderá redefinir estatísticas usando a instrução ALTER RESOURCE GOVERNOR RESET STATISTICS.

Estatísticas de runtime do pool de recursos

Para cada pool de recursos, o administrador de recursos rastreia a utilização de CPU e memória, eventos fora da memória, concessões de memória, E/S e outras estatísticas. Para obter mais informações, consulte sys.dm_resource_governor_resource_pools.

A consulta a seguir retorna um subconjunto de estatísticas disponíveis para todos os pools de recursos:

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;

Estatísticas de runtime do grupo de carga de trabalho

Para cada grupo de carga de trabalho, o administrador de recursos controla o tempo de CPU, o número de solicitações, tarefas bloqueadas, tempo de espera de bloqueio, otimizações de consulta e outras estatísticas. Para obter mais informações, consulte sys.resource_governor_workload_groups.

A consulta a seguir retorna um subconjunto de estatísticas disponíveis para todos os grupos de carga de trabalho:

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

Agregar sessões por grupo de carga de trabalho e atributos de sessão

A consulta a seguir retorna uma distribuição de sessões entre grupos de carga de trabalho e estatísticas de sessão de agregação para cada grupo de carga de trabalho.

Um alto número de sessões com o status preconnect pode indicar lentidão na execução do classificador.

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;

Agregar solicitações por grupo de carga de trabalho e atributos de solicitação

A consulta a seguir retorna uma distribuição de solicitações entre grupos de carga de trabalho e estatísticas de solicitação de agregação para cada grupo de carga de trabalho:

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;

Práticas recomendadas do administrador de recursos

  • Configure a DAC (Conexão de Administrador Dedicado) e saiba como usá-la. Para obter mais informações, consulte Conexão de diagnóstico para administradores de banco de dados. Se a configuração do administrador de recursos não funcionar, você poderá usar o DAC para solucionar problemas ou desabilitar o Resource Governor.
  • Ao configurar pools de recursos, tenha cuidado ao especificar valores grandes para MIN_CPU_PERCENT, MIN_MEMORY_PERCENTe MIN_IOPS_PER_VOLUME. Uma configuração MIN reserva recursos para um pool de recursos e os torna indisponíveis para outros pools de recursos, incluindo o pool de default. Para obter mais informações, consulte Criar um pool de recursos.
  • A função de classificador estende o tempo de processamento de logon. Evite lógica complexa e consultas de execução longa ou com uso intensivo de recursos no classificador, especialmente se as consultas usarem tabelas grandes. Uma função excessivamente complexa pode causar atrasos de logon ou tempos limite de conexão.
  • Se você precisar usar uma tabela no classificador e a tabela for pequena e principalmente estática, considere usar um construtor com valor de tabela , conforme mostrado em um exemplo anteriormente neste artigo.
  • Evite usar uma tabela modificada com frequência no classificador. Isso aumenta o risco de bloqueio que pode atrasar logons e causar tempos limite de conexão. As seguintes soluções alternativas podem atenuar o risco, no entanto, elas têm desvantagens, incluindo o risco de classificação incorreta:
    • Considere usar a dica de tabela NOLOCK ou a dica equivalente READUNCOMMITTED. Para obter mais informações, consulte READUNCOMMITTED.
    • Considere usar a configuração LOCK_TIMEOUT no início da função de classificador, definindo-a como um valor baixo, como 1.000 milissegundos. Para obter mais informações, consulte SET LOCK_TIMEOUT.
  • Você não pode modificar uma função de classificador enquanto ela é referenciada na configuração do administrador de recursos. No entanto, você pode modificar a configuração para usar uma função de classificador diferente. Se você quiser fazer alterações no classificador, considere a criação de um par de funções de classificador. Por exemplo, você pode criar dbo.rg_classifier_A() e dbo.rg_classifier_B(). Quando uma alteração na lógica do classificador for necessária, siga estas etapas:
    1. Use a instrução ALTER FUNCTION para fazer as alterações na função que não é usada atualmente na configuração do governador de recursos.
    2. Use a instrução ALTER RESOURCE GOVERNOR para tornar o classificador modificado ativo e reconfigurar o administrador de recursos. Por exemplo:
      ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B);
      ALTER RESOURCE GOVERNOR RECONFIGURE;
      
    3. Se uma alteração for necessária novamente, siga as mesmas etapas usando a outra função (dbo.rg_classifier_A()).
  • A configuração do administrador de recursos é armazenada no banco de dados master. Faça backup de mastercom frequência e saiba como restaurá-la. Para obter mais informações, consulte Backup e restauração: bancos de dados do sistema. Como há limitações em relação à restauração de master, recomendamos que você também salve uma cópia dos scripts de configuração do administrador de recursos separadamente. Você pode recriar a configuração do governador de recursos a partir de scripts se o banco de dados master precisar ser recriado.