Compartir a través de


Función clasificadora del regulador de recursos

Se aplica a:SQL ServerAzure SQL Managed Instance

El proceso de clasificación del regulador de recursos puede usar una función clasificadora para asignar sesiones entrantes a un grupo de cargas de trabajo. La función clasificadora contiene la lógica personalizada para clasificar las sesiones en grupos de cargas de trabajo.

Para obtener ejemplos de configuración y supervisión y aprender los procedimientos recomendados del regulador de recursos, consulte Tutorial: Ejemplos de configuración del regulador de recursos y procedimientos recomendados.

clasificación

Con el regulador de recursos, cada nueva sesión se clasifica en un grupo de cargas de trabajo. El clasificador es una función escalar definida por el usuario que se crea. Contiene la lógica deseada para asignar sesiones entrantes a un grupo de cargas de trabajo. El valor escalar devuelto por el clasificador es el nombre de un grupo de cargas de trabajo que se asignará a una sesión entrante.

Si el regulador de recursos está habilitado y se especifica una función clasificadora en la configuración del regulador de recursos, la salida de la función determina el grupo de cargas de trabajo usado para las nuevas sesiones. De lo contrario, todas las sesiones de usuario se clasifican en el grupo de trabajo default.

Nota:

El internal grupo de cargas de trabajo solo se usa para las solicitudes internas del sistema. No puede cambiar los criterios usados para asignar solicitudes al internal grupo de cargas de trabajo y no puede clasificar explícitamente las solicitudes en el grupo de internal cargas de trabajo.

Debe completar los pasos siguientes para empezar a usar una función clasificadora:

  1. Cree la función en la master base de datos mediante CREATE FUNCTION. La función debe usar la vinculación de esquemas.
  2. Referencie la función en la configuración del regulador de recursos mediante ALTER RESOURCE GOVERNOR con el parámetro CLASSIFIER_FUNCTION.
  3. Haga que la nueva configuración sea eficaz mediante ALTER RESOURCE GOVERNOR RECONFIGURE.

Importante

Los intentos de conexión del cliente podrían agotar el tiempo de espera si la función de clasificación no se completa dentro del período configurado por el cliente para el tiempo de espera de conexión. Es importante crear funciones clasificadoras que finalicen la ejecución antes de que se produzca un tiempo de espera de conexión.

Mantenga la función clasificadora sencilla. Evite usar lógica compleja o lenta. Si es posible, evite el acceso a los datos en el clasificador.

La función clasificadora tiene las siguientes características y comportamientos:

  • La función se define en el ámbito del servidor (en la master base de datos).
  • La función se define con enlace de esquema. Para obtener más información, vea SCHEMABINDING.
  • La función se evalúa para cada nueva sesión, incluso cuando está habilitada la agrupación de conexiones.
  • La función devuelve el contexto del grupo de cargas de trabajo para la sesión. La sesión se asigna al grupo de cargas de trabajo devuelto por el clasificador durante la vigencia de la sesión.
  • Si la función devuelve NULL, defaulto el nombre de un grupo de cargas de trabajo inexistente, la sesión recibe el contexto del default grupo de cargas de trabajo. La sesión también recibe el default contexto en caso de que se produzca un error en la función por cualquier motivo.
  • Después de que se añade o elimina una función clasificadora mediante la instrucción ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...), el cambio solo surte efecto tras ejecutar la instrucción ALTER RESOURCE GOVERNOR RECONFIGURE.
  • Solo se puede designar una función como clasificador a la vez.
  • La función clasificadora no se puede modificar ni eliminar a menos que se quite su estado de clasificador mediante ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...) la instrucción que establece el nombre de la función en NULL o en el nombre de otra función.
  • En ausencia de una función clasificadora, todas las sesiones se clasifican en el default grupo.
  • Los grupos de cargas de trabajo especificados en la salida de la función clasificadora están fuera del ámbito de la restricción de enlace de esquema. Por ejemplo, no se puede quitar una tabla a la que se hace referencia en la función clasificadora, pero puede quitar un grupo de cargas de trabajo aunque el clasificador devuelva el nombre de ese grupo.

Habilitación de DAC

Para solucionar problemas y diagnósticos, se recomienda habilitar y familiarizarse de forma proactiva con la conexión de administrador dedicado (DAC). La DAC no está sujeta a la clasificación del regulador de recursos. Puede usar una DAC para supervisar y solucionar problemas de una función clasificadora incluso si la configuración del regulador de recursos no funciona correctamente y hace que otras conexiones no se puedan usar. Para obtener más información, consulte Conexión de diagnóstico para administradores de bases de datos.

Si una DAC no está disponible para solucionar problemas, puede iniciar el servidor en modo de usuario único. Aunque la conexión en modo de usuario único no está sujeta a clasificación, no permite diagnosticar la clasificación del regulador de recursos mientras está en ejecución.

Una vez que se conecte mediante una DAC o conéctese en modo de usuario único, puede modificar la configuración del regulador de recursos para quitar una función clasificadora que no funciona correctamente o deshabilitar el regulador de recursos.

Proceso de inicio de sesión

En el contexto del regulador de recursos, el proceso de inicio de sesión de una sesión consta de los pasos siguientes:

  1. Autenticación de inicio de sesión.
  2. Ejecución del desencadenador de inicio de sesión . Se produce solo si existen disparadores de inicio de sesión en la instancia.
  3. Clasificación.

Cuando se inicia la clasificación, el regulador de recursos ejecuta la función clasificadora y usa el valor escalar devuelto por la función para enviar solicitudes al grupo de cargas de trabajo coincidente.

Puede supervisar la ejecución de desencadenadores de inicio de sesión y la función clasificadora mediante sys.dm_exec_sessions y sys.dm_exec_requests vistas del sistema.

Examples

La función clasificadora del regulador de recursos puede usar una amplia variedad de lógicas personalizadas. Para obtener más ejemplos y un tutorial, consulte Tutorial: Ejemplos de configuración del regulador de recursos y procedimientos recomendados.

A. Nombre del anfitrión

Esta función clasifica las sesiones de un nombre de host específico en un grupo de cargas de trabajo denominado Reports, mediante la función del sistema integrada HOST_NAME(). Todas las demás sesiones continúan clasificándose en el grupo de carga de trabajo de default.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (HOST_NAME() IN ('reportserver1','reportserver2'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

B. Nombre de usuario

Esta función clasifica las sesiones de nombres de usuario específicos o nombres de cuenta de servicio en un grupo de cargas de trabajo denominado Reports, mediante la función del sistema integrada SUSER_SNAME(). Todas las demás sesiones se siguen clasificando en el grupo de cargas de trabajo default.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (SUSER_SNAME() IN ('Reporting', 'domain/svc_reporting'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

C. Nombre de la aplicación

Esta función clasifica las sesiones de nombres de aplicación específicos en un grupo de cargas de trabajo denominado Adhoc, mediante la función del sistema integrada APP_NAME(). Todas las demás sesiones se siguen clasificando en el grupo de trabajo de carga de default.

Importante

Una aplicación o usuario puede proporcionar cualquier nombre de aplicación como parte de la cadena de conexión. Los usuarios pueden conectarse a través de una amplia variedad de aplicaciones.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (APP_NAME() IN ('Microsoft SQL Server Management Studio - Query','azdata'))
        SET @grp_name = 'Adhoc';
    
    RETURN @grp_name;
END;
GO