Compartir vía


Tutorial: Ejemplos de configuración del regulador de recursos y procedimientos recomendados

se aplica a:SQL Serverazure SQL Managed Instance

Este artículo contiene ejemplos de tutoriales que le ayudarán a configurar el regulador de recursos y validar que la configuración funciona según lo previsto. Comienza con un ejemplo sencillo y avanza a los más complejos.

En el artículo también se incluyen ejemplos de consultas de supervisión del regulador de recursos y una lista de procedimientos recomendados del regulador de recursos.

En todos los ejemplos se supone que inicialmente, el regulador de recursos está deshabilitado y usa la configuración predeterminada, y que no existen grupos de recursos, grupos de cargas de trabajo y funciones clasificadoras definidas por el usuario.

Nota

Para modificar la configuración del regulador de recursos en Instancia administrada de Azure SQL, debe estar en el contexto de la base de datos master en la réplica principal.

Modificación del grupo predeterminado

En este ejemplo se usa el regulador de recursos para limitar el tamaño máximo de una concesión de memoria para todas las consultas de usuario. Para ello, se reduce la configuración REQUEST_MAX_MEMORY_GRANT_PERCENT del grupo de cargas de trabajo default del 25 % al 10 % predeterminado. En el ejemplo no se usa una función clasificadora . Esto significa que el procesamiento de inicio de sesión no se ve afectado y todas las sesiones de usuario se siguen clasificando en el grupo de cargas de trabajo de default.

Es posible que tenga que limitar el tamaño de las concesiones de memoria si las consultas esperan memoria porque otras consultas reservan demasiada memoria. Para obtener más información, consulte Solución de problemas de rendimiento lento o poca memoria causados por concesiones de memoria en SQL Server.

  1. Modifique el grupo de cargas de trabajo predeterminado.

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);
    
  2. Active el regulador de recursos para que la configuración sea eficaz.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  3. Valide la nueva configuración, incluido el nuevo tamaño máximo de una concesión de memoria.

    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 revertir a la configuración inicial, ejecute el siguiente script:

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

Uso de un grupo de cargas de trabajo definido por el usuario

En este ejemplo se usa el regulador de recursos para asegurarse de que todas las solicitudes en sesiones con un nombre de aplicación específico no se ejecuten con un grado de paralelismo (DOP) superior a cuatro. Para ello, se clasifican las sesiones en un grupo de cargas de trabajo con la configuración de MAX_DOP establecida en 4.

Para obtener más información sobre cómo configurar el grado máximo de paralelismo, consulte Configuración del servidor: grado máximo de paralelismo.

  1. Cree un grupo de cargas de trabajo que limite el DOP. El grupo usa el grupo de recursos de default porque solo queremos limitar DOP para una aplicación específica, pero no reservar ni limitar recursos de CPU, memoria o E/S.

    CREATE WORKLOAD GROUP limit_dop
    WITH (
         MAX_DOP = 4
         )
    USING [default];
    
  2. Cree la función clasificadora. La función usa la función APP_NAME() integrada para determinar el nombre de la aplicación especificado en la cadena de conexión del cliente. Si el nombre de la aplicación se establece en limited_dop_application, la función devuelve el nombre del grupo de cargas de trabajo que limita DOP. De lo contrario, la función devuelve default como nombre del grupo de cargas de trabajo.

    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 la configuración del regulador de recursos para que la configuración sea eficaz y habilite el regulador de recursos.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  4. Consulte sys.resource_governor_configuration para validar que el regulador de recursos está habilitado y usa la función clasificadora que creamos.

    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. Compruebe que las sesiones con un nombre de aplicación específico se clasifican en el grupo de cargas de trabajo de limit_dop, mientras que otras sesiones siguen estando clasificadas en el grupo de cargas de trabajo de default. Usaremos una consulta que utiliza las vistas del sistema sys.dm_exec_sessions y sys.resource_governor_workload_groups para devolver el nombre de la aplicación y del grupo de cargas de trabajo de la sesión actual.

    1. En SQL Server Management Studio (SSMS), seleccione Archivo en el menú principal, Nuevo, Consulta del motor de base de datos.

    2. En el cuadro de diálogo Conectar al motor de base de datos, especifique la misma instancia del motor de base de datos donde creó el grupo de cargas de trabajo y la función clasificadora. Seleccione la pestaña Parámetros de conexión adicionales y escriba App=limited_dop_application. Esto hace que SSMS use limited_dop_application como nombre de aplicación al conectarse a la instancia.

    3. Seleccione Conectar para abrir una nueva conexión.

    4. En la misma ventana de consulta, ejecute la consulta siguiente:

      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;
      

      Deberías ver el siguiente resultado, que muestra que la sesión se clasificó en el grupo de cargas de trabajo limit_dop con el DOP máximo establecido en cuatro.

      application_name            workload_group_name     max_dop
      ----------------            -------------------     -------
      limited_dop_application     limit_dop               4
      
    5. Repita los pasos anteriores, pero no escriba nada en el cuadro de la pestaña Parámetros de conexión adicionales. La salida cambia, en la que se muestra el nombre predeterminado de la aplicación de SSMS y el grupo de cargas de trabajo de default con el valor de 0 predeterminado para el DOP máximo.

      application_name                                    workload_group_name     max_dop
      ----------------                                    -------------------     -------
      Microsoft SQL Server Management Studio - Query      default                 0
      
  6. Para revertir a la configuración inicial de este ejemplo, desconecte todas las sesiones mediante el grupo de cargas de trabajo limit_dop y ejecute el siguiente script de T-SQL. El script incluye los pasos siguientes:

    1. Deshabilite el regulador de recursos para que se pueda quitar la función clasificadora.
    2. Anule el grupo de cargas de trabajo. Esto requiere que no haya sesiones que usen este grupo de cargas de trabajo.
    3. Vuelva a configurar el regulador de recursos para volver a cargar la configuración efectiva sin la función clasificadora y el grupo de cargas de trabajo. Esto habilita el regulador de recursos.
    4. Deshabilite el regulador de recursos para revertir a la configuración 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;
    

Uso de varios grupos de recursos y grupos de cargas de trabajo

En este ejemplo se usa el regulador de recursos para clasificar las sesiones de una aplicación de procesamiento de pedidos en diferentes grupos de cargas de trabajo y grupos de recursos en función de la hora del día. Esta configuración asigna más recursos a la aplicación durante los tiempos de procesamiento máximos y limita sus recursos durante las horas fuera del horario. En el ejemplo se supone que la aplicación no usa sesiones de ejecución prolongada.

  1. Cree dos grupos de recursos para el procesamiento de horas punta y horas fuera del horario.

    • El grupo peak_hours_pool garantiza (reserva) un mínimo del 20 % del ancho de banda medio de CPU a través de MIN_CPU_PERCENT y no limita el ancho de banda de CPU estableciendo MAX_CPU_PERCENT en 100.
    • El grupo de off_hours_pool no reserva ningún ancho de banda de CPU estableciendo MIN_CPU_PERCENT en 0, pero limita el ancho de banda de CPU a 50% cuando la contención de CPU está presente estableciendo MAX_CPU_PERCENT en 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
         );
    

    Los grupos de recursos pueden reservar y limitar recursos del sistema, como CPU, memoria e E/S. Para obtener más información, consulte CREATE RESOURCE POOL.

  2. Cree dos grupos de cargas de trabajo, uno para cada grupo de recursos, respectivamente.

    • El peak_hours_group no limita el número de solicitudes simultáneas estableciendo GROUP_MAX_REQUESTS en el valor predeterminado de 0.
    • El off_hours_group limita el número de solicitudes simultáneas en todas las sesiones clasificadas en este grupo estableciendo GROUP_MAX_REQUESTS en 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;
    

    Los grupos de cargas de trabajo definen directivas como el número máximo de solicitudes, el grado máximo de paralelismo y el tamaño máximo de concesión de memoria. Para obtener más información, consulte CREATE WORKLOAD GROUP.

  3. Cree y rellene una tabla que defina los intervalos de horas pico y horas valle.

    • Cada fila de la tabla define la hora de inicio y finalización del intervalo y el nombre del grupo de cargas de trabajo que se va a usar durante el intervalo.
    • La hora de inicio y finalización de cada intervalo es inclusiva.
    • La tabla se crea en la base de datos master para que se pueda usar en una función clasificadora enlazada al 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. Cree la función clasificadora.

    • Se espera que los datos de la tabla tengan una sola fila coincidente para cualquier hora determinada del día. Si los datos infringen esa regla, la función devuelve default como el nombre del grupo de cargas de trabajo.
    • La siguiente función de ejemplo también devuelve default si el nombre de la aplicación devuelto por la función integrada APP_NAME() es algo distinto 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. Este es un paso opcional. En lugar de crear una tabla en la base de datos master, puede usar un constructor con valores de tabla para definir los intervalos de tiempo directamente en la función clasificadora. Este es el enfoque recomendado cuando el tamaño de los datos es pequeño y los criterios de función clasificador no cambian con frecuencia. Este es un ejemplo del mismo clasificador que usa un constructor con valores de tabla en lugar de una tabla en 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 la configuración del regulador de recursos para que la configuración sea eficaz y habilite el regulador de recursos.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  7. Compruebe que el regulador de recursos está habilitado, está usando la función clasificadora especificada y que la función clasificadora funciona según lo previsto mediante pasos similares como en el ejemplo anterior . Esta vez, se escribe App=order_processing en la pestaña Parámetros de conexión adicionales en el cuadro de diálogo de conexión de SSMS para que coincida con el nombre de la aplicación en la función clasificadora. Ejecute la consulta siguiente para determinar el nombre de la aplicación, el grupo de cargas de trabajo, el grupo de recursos y la reserva de CPU y el límite de la sesión actual:

    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;
    

    Los resultados dependen de la hora del día. Por ejemplo, si la hora actual es 14:30, el resultado muestra que se usan peak_hours_group y peak_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. Para revertir a la configuración inicial de este ejemplo, desconecte todas las sesiones con los grupos de cargas de trabajo de peak_hours_group y off_hours_group y ejecute el siguiente script de T-SQL. El script incluye los pasos siguientes:

    1. Deshabilite el regulador de recursos para que se pueda quitar la función clasificadora.
    2. Anule los grupos de cargas de trabajo. Esto requiere que ninguna sesión use estos grupos de cargas de trabajo.
    3. Una vez que se quitan los grupos de cargas de trabajo, quite los grupos de recursos.
    4. Reconfigura el administrador de recursos para volver a cargar la configuración efectiva sin la función clasificadora ni los grupos de trabajo y los grupos de recursos definidos por el usuario. Esto habilita el regulador de recursos.
    5. Deshabilite el regulador de recursos para revertir a la configuración 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;
    

Supervisión del regulador de recursos mediante vistas del sistema

Las consultas de ejemplo de esta sección muestran cómo puede supervisar las estadísticas y el comportamiento en tiempo de ejecución del regulador de recursos.

Las estadísticas del regulador de recursos son acumulativas desde el último reinicio del servidor. Si necesita recopilar estadísticas a partir de un momento determinado, puede restablecer las estadísticas mediante la instrucción ALTER RESOURCE GOVERNOR RESET STATISTICS.

Estadísticas de tiempo de ejecución del grupo de recursos

Para cada grupo de recursos, el regulador de recursos realiza un seguimiento del uso de cpu y memoria, eventos fuera de memoria, concesiones de memoria, E/S y otras estadísticas. Para obtener más información, consulte sys.dm_resource_governor_resource_pools.

La consulta siguiente devuelve un subconjunto de estadísticas disponibles para todos los grupos 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;

Estadísticas de tiempo de ejecución del grupo de cargas de trabajo

Para cada grupo de cargas de trabajo, el regulador de recursos realiza un seguimiento del tiempo de CPU, el número de solicitudes, las tareas bloqueadas, el tiempo de espera de bloqueo, las optimizaciones de consultas y otras estadísticas. Para obtener más información, consulte sys.resource_governor_workload_groups.

La consulta siguiente devuelve un subconjunto de estadísticas disponibles para todos los grupos de cargas de trabajo:

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 sesiones por grupo de cargas de trabajo y atributos de sesión

La consulta siguiente devuelve una distribución de sesiones entre grupos de cargas de trabajo y estadísticas de sesión agregadas para cada grupo de cargas de trabajo.

Un gran número de sesiones con el estado preconnect podría indicar lentitud en la ejecución del clasificador.

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;

Solicitudes agregadas por grupo de cargas de trabajo y atributos de solicitud

La consulta siguiente devuelve una distribución de solicitudes entre grupos de cargas de trabajo y estadísticas de solicitudes agregadas para cada grupo de cargas de trabajo:

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;

Procedimientos recomendados del regulador de recursos

  • Configure la conexión de administrador dedicada (DAC) y aprenda a usarlo. Para obtener más información, consulte Conexión de diagnóstico para administradores de bases de datos. Si la configuración del regulador de recursos no funciona correctamente, puede usar DAC para solucionar problemas o deshabilitar el regulador de recursos.
  • Al configurar grupos de recursos, tenga cuidado de especificar valores grandes para MIN_CPU_PERCENT, MIN_MEMORY_PERCENTy MIN_IOPS_PER_VOLUME. Una configuración de MIN reserva recursos para un grupo de recursos y hace que no estén disponibles para otros grupos de recursos, incluido el grupo de default. Para obtener más información, consulte Creación de un grupo de recursos.
  • La función clasificadora amplía el tiempo de procesamiento de inicio de sesión. Evite consultas complejas de ejecución prolongada o de uso intensivo de recursos en el clasificador, especialmente si las consultas usan tablas grandes. Una función demasiado compleja puede provocar retrasos de inicio de sesión o tiempos de espera de conexión.
  • Si necesita usar una tabla en el clasificador y la tabla es pequeña y principalmente estática, considere la posibilidad de usar un constructor con valores de tabla en su lugar, como se muestra en un ejemplo de anterior en este artículo.
  • Evite usar una tabla modificada con frecuencia en el clasificador. Esto aumenta el riesgo de bloqueo que puede retrasar los inicios de sesión y provocar tiempos de espera de conexión. Las siguientes soluciones alternativas pueden mitigar el riesgo, pero tienen desventajas, incluido el riesgo de clasificación incorrecta:
    • Considere usar la indicación de tabla NOLOCK o la indicación equivalente READUNCOMMITTED. Para obtener más información, vea READUNCOMMITTED.
    • Considere la posibilidad de usar la configuración de LOCK_TIMEOUT al principio de la función clasificadora y establecerla en un valor bajo, como 1000 milisegundos. Para más información, consulte SET LOCK_TIMEOUT.
  • No se puede modificar una función clasificadora mientras se hace referencia a ella en la configuración del regulador de recursos. Sin embargo, puede modificar la configuración para usar una función clasificadora diferente. Si desea realizar cambios en el clasificador, considere la posibilidad de crear un par de funciones clasificadoras. Por ejemplo, puede crear dbo.rg_classifier_A() y dbo.rg_classifier_B(). Cuando se necesite un cambio en la lógica del clasificador, siga estos pasos:
    1. Use la instrucción ALTER FUNCTION para realizar los cambios en la función que no se usan actualmente en la configuración del regulador de recursos.
    2. Use la instrucción ALTER RESOURCE GOVERNOR para activar el clasificador modificado y volver a configurar el regulador de recursos. Por ejemplo:
      ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B);
      ALTER RESOURCE GOVERNOR RECONFIGURE;
      
    3. Si se vuelve a necesitar un cambio, siga los mismos pasos mediante la otra función (dbo.rg_classifier_A()).
  • La configuración del regulador de recursos se almacena en la base de datos de master. Asegúrese de realizar copias de seguridad periódicas de mastery saber cómo restaurarla. Para obtener más información, consulte Copia de seguridad y restauración: Bases de datos del sistema. Dado que hay limitaciones para restaurar master, se recomienda guardar también una copia de los scripts de configuración del regulador de recursos por separado. Puede volver a crear la configuración del regulador de recursos a partir de scripts si es necesario volver a compilar la base de datos de master.