Partilhar via


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

Aplica-se a:SQL ServerAzure SQL Managed Instance

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. Começa com um exemplo simples e progride para os mais complexos.

O artigo inclui também exemplos de consultas de monitoramento do administrador de recursos e uma lista de práticas recomendadas do administrador 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, grupos de carga de trabalho e funções de classificador definidos pelo usuário.

Observação

Para modificar a configuração do administrador de recursos na Instância Gerenciada 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 do usuário. Isso é feito ao reduzir a configuração de REQUEST_MAX_MEMORY_GRANT_PERCENT do grupo de carga de trabalho default dos 25% padrão para 10%. O exemplo não usa uma função de classificador . Isso significa que o processamento de login 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 à espera de memória devido ao fato de outras consultas terem reservado demasiada memória. Para obter mais informações, consulte Solucionar 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) superior a quatro. Isso é feito classificando as sessões em um grupo de carga de trabalho com a configuração MAX_DOP definida como 4.

Para obter mais informações sobre como configurar o grau máximo de paralelismo, consulte Configuração do Server: 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 interna APP_NAME() 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. Consulte sys.resource_governor_configuration para validar que o governador de recursos está habilitado e está usando a função de classificador que criámos.

    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 visõ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 para a sessão atual.

    1. No SQL Server Management Studio (SSMS), selecione Arquivo no menu principal, Novo, Consulta do Motor de Base 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 onde você criou o grupo de carga de trabalho e a função de classificador. Selecione a guia Parâmetros de conexão adicionais e digite 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ê 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 da guia Parâmetros de Conexão Adicionais. A saída é alterada, mostrando o nome do aplicativo SSMS padrão e o grupo de carga de trabalho default com o valor de 0 padrão para 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 seguinte script T-SQL. O script inclui as seguintes etapas:

    1. Desative o administrador de recursos para que a função de classificador possa ser descartada.
    2. Elimine 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. Isto ativa o controlador de recursos.
    4. Desative 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;
    

Usar múltiplos conjuntos 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 fora do horário de expediente. O exemplo pressupõe que o aplicativo não usa sessões de longa execução.

  1. Crie dois pools de recursos para processamento em horário de pico e fora do horário de expediente.

    • A pool peak_hours_pool garante (reserva) um mínimo de 20% de largura de banda média de CPU via MIN_CPU_PERCENTe não limita a largura de banda da CPU ao definir 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 defina os intervalos de tempo de pico e horas fora de pico.

    • Cada linha na tabela define a hora de início e de 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 de fim de cada intervalo é inclusiva.
    • A tabela é criada no banco de dados master para que possa ser usada em uma função de classificador ligada 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 retorna default se o nome do aplicativo retornado pela função APP_NAME() interna for algo 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 na base de dados master, pode-se usar um construtor de tipo tabela para definir os intervalos de tempo diretamente na função de classificação. Esta é 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 às do 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 seguinte consulta 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 mostra 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 seguinte script T-SQL. O script inclui as seguintes etapas:

    1. Desative o administrador de recursos para que a função de classificador possa ser descartada.
    2. Remova 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 removidos, elimine 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 definidos pelo usuário e pools de recursos. Isto ativa o controlador de recursos.
    5. Desative 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;
    

Monitorizar o gestor de recursos usando vistas do sistema

Consultas de exemplo nesta seção mostram como você pode monitorar as estatísticas e o comportamento do tempo de execução 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 tempo, poderá redefinir as estatísticas usando a instrução ALTER RESOURCE GOVERNOR RESET STATISTICS.

Estatísticas de tempo de execução do pool de recursos

Para cada pool de recursos, o administrador de recursos rastreia a utilização da CPU e da memória, eventos de falta de 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 tempo de execução do grupo de carga de trabalho

Para cada grupo de carga de trabalho, o administrador de recursos controla o tempo da 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 agregadas 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 agregadas 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 Conexão de Administrador Dedicado (DAC) 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 para desabilitar o administrador de recursos.

  • Ao configurar pools de recursos, tenha cuidado ao especificar valores grandes para MIN_CPU_PERCENT, MIN_MEMORY_PERCENTe MIN_IOPS_PER_VOLUME. Uma definição de 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 login. Evite lógicas complexas e consultas de longa execução ou que consomem muitos recursos no classificador, especialmente se as consultas usarem tabelas grandes. Uma função excessivamente complexa pode causar atrasos de login 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 em vez disso, conforme mostrado em um exemplo de anteriormente neste artigo.

  • Evite usar uma tabela modificada com frequência no classificador. Isso aumenta o risco de bloqueio, o que pode atrasar logins e causar tempos limite de conexão. As seguintes soluções alternativas podem reduzir o risco, no entanto, têm desvantagens, incluindo o risco de classificação incorreta:

    • Considere usar a dica de tabela NOLOCK ou a dica READUNCOMMITTED equivalente. Para obter mais informações, consulte READUNCOMMITTED.
    • Considere usar a configuração LOCK_TIMEOUT no início da função de classificador, definindo-a para um valor baixo, como 1.000 milissegundos. Para obter mais informações, consulte SET LOCK_TIMEOUT.
  • Se você executar ALTER RESOURCE GOVERNOR RECONFIGURE depois de excluir um pool de recursos não utilizados em uma máquina com uma grande quantidade de memória, o comando pode levar muito tempo. Se uma função de classificador estiver em vigor antes do início da reconfiguração, novas tentativas de conexão feitas durante esse tempo podem atingir o tempo limite.

    Se você excluir um pool de recursos não utilizado, recomendamos reconfigurar o administrador de recursos durante uma janela de manutenção ou um período de baixa atividade.

  • Não é possível 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 quiser fazer alterações no classificador, considere criar um par de funções de classificador. Por exemplo, você pode criar dbo.rg_classifier_A() e dbo.rg_classifier_B(). Quando for necessária uma alteração à lógica do classificador, siga estes passos:

    1. Use a instrução ALTER FUNCTION para fazer as alterações na função não usadas atualmente na configuração do administrador de recursos.
    2. Use a instrução ALTER RESOURCE GOVERNOR para tornar o classificador modificado ativo e, em seguida, reconfigure 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. Certifique-se de fazer backup periodicamente mastere saiba como restaurá-lo. Para obter mais informações, consulte Backup e restauração: bancos de dados do sistema. Como há limitações na 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 administrador de recursos a partir de scripts se o banco de dados master precisar ser reconstruído.