Conceptos del regulador de recursos

Los tres conceptos siguientes son fundamentales para comprender y utilizar el regulador de recursos:

  • Grupo de recursos de servidor. Se crean dos grupos de recursos de servidor (interno y predeterminado) cuando se instala SQL Server 2008. El regulador de recursos también admite grupos de recursos de servidor definidos por el usuario.

  • Grupos de carga de trabajo. Cuando se instala SQL Server 2008, se crean dos grupos de carga de trabajo (interno y predeterminado) y se asignan a sus grupos de recursos de servidor correspondientes. El regulador de recursos también admite grupos de cargas de trabajo definidos por el usuario.

  • Clasificación. Existen reglas internas que clasifican las solicitudes entrante y las enruta a un grupo de cargas de trabajo. El regulador de recursos también admite una función clasificadora definida por el usuario para implementar las reglas de la clasificación.

[!NOTA]

El regulador de recursos no impone ningún control sobre las conexiones de administrador dedicadas (DAC). No hay ninguna necesidad de clasificar las consultas de DAC, las cuales se ejecutan en el grupo de cargas de trabajo y en el grupo de recursos de servidor internos.

En el contexto del regulador de recursos, puede tratar los conceptos anteriores como componentes. La ilustración siguiente muestra estos componentes y su relación entre sí, tal y como existen en el entorno del motor de base de datos. Desde el punto de vista del procesamiento, el flujo simplificado es como sigue:

  • Existe una conexión entrante para una sesión (sesión 1 de n).

  • La sesión está clasificada (Clasificación).

  • La carga de trabajo de la sesión se enruta a un grupo de cargas de trabajo, por ejemplo, al Grupo 4.

  • El grupo de cargas de trabajo utiliza el grupo de recursos de servidor al que está asociado, por ejemplo, el Grupo 2.

  • El grupo de recursos de servidor proporciona y limita los recursos requeridos por la aplicación, por ejemplo, la Aplicación 3.

Componentes funcionales del regulador de recursos

Grupos de recursos de servidor

Un grupo de recursos de servidor o grupo, representa los recursos físicos del servidor. Puede pensar en un grupo como en una instancia virtual de SQL Server dentro de una instancia de SQL Server.

Un grupo tiene dos partes. Una parte no se superpone con otros grupos, lo que permite una reserva mínima de recursos. La otra parte se comparte con otros grupos, lo que permite consumir el consumo máximo de recursos. En esta versión de regulador de recursos, se establecen los recursos del grupo especificando uno de los siguientes valores para cada recurso:

  • MIN o MAX para la CPU

  • MIN o MAX para la memoria

MIN y MAX representan el grado mínimo de disponibilidad garantizada de recursos del grupo y el tamaño máximo del grupo, respectivamente, para cada uno de esos recursos.

La suma de los valores MIN de todos los grupos no puede superar el 100 por cien de los recursos del servidor. El valor MAX se puede establecer dentro del rango comprendido entre MIN y el 100 por cien, inclusive.

Si un grupo tiene definido un MIN distinto de cero, el valor MAX efectivo del resto de grupos se reajustará como el mínimo del valor MAX configurado para un grupo y la suma de los valores MIN de otros grupos restados del 100 por cien.

La tabla siguiente muestra los conceptos anteriores. La tabla muestra los valores para el grupo interno, el grupo predeterminado y para dos grupos definidos por el usuario. Las fórmulas siguientes se utilizan para calcular el % del MAX efectivo y el % del compartido.

  • Min(X,Y) se refiere al valor mínimo de X e Y.

  • Sum(X) se refiere a la suma del valor X a lo largo de todos los grupos.

  • El % total compartido = 100 - sum(% MIN).

  • El % MAX efectivo = min(X,Y).

  • El % compartido = % MAX efectivo - % MIN.

Nombre del grupo

Valor de % MIN

Valor de % MAX

% MAX efectivo calculado

% compartido calculado

Comentario

interno

0

100

100

0

El % MAX efectivos y el % compartido no son aplicables al grupo interno.

predeterminado

0

100

30

30

El valor MAX efectivo se calcula como: min (100,100 - (20+50)) = 30. El % compartido calculado es el MAX efectivo - MIN = 30.

Grupo 1

20

100

50

30

El valor MAX efectivo se calcula como: min(100,100-50) = 50. El % compartido calculado es el MAX efectivo - MIN = 30.

Grupo 2

50

70

70

20

El valor MAX efectivo se calcula como: min(70,100-20) = 70. El % compartido calculado es el MAX efectivo - MIN = 20.

Utilizando la tabla anterior como ejemplo podemos mostrar más detalladamente los ajustes que tienen lugar cuando se crea otro grupo. Este grupo es el Grupo 3 y tiene un valor de % MIN de 5.

Nombre del grupo

Valor de % MIN

Valor de % MAX

% MAX efectivo calculado

% compartido calculado

Comentario

interno

0

100

100

0

El % MAX efectivo y el % compartido no son aplicables al grupo interno.

predeterminado

0

100

25

25

El valor MAX efectivo se calcula como: min(100,100-(20+50+5)) = 25. El % compartido calculado es el MAX efectivo - MIN = 25.

Grupo 1

20

100

45

25

El valor MAX efectivo se calcula como: min(100,100-55) = 45. El % compartido calculado es el MAX efectivo - MIN = 25.

Grupo 2

50

70

70

20

El valor MAX efectivo se calcula como: min(70,100-25) = 70. El % compartido calculado es el MAX efectivo - MIN = 20.

Grupo 3

5

100

30

25

El valor MAX efectivo se calcula como: min(100,100-70) = 30. El % compartido calculado es el MAX efectivo - MIN = 25.

La parte compartida del grupo se utiliza para indicar dónde pueden ir los recursos en caso de que estén disponibles. Sin embargo, cuando se utilizan los recursos, éstos van al grupo especificado y no se comparten. Esto puede mejorar la utilización de los recursos en aquellos casos en los que no existen solicitudes en un grupo dado y donde es posible que los recursos configurados para el grupo se liberen para otros grupos.

Algunos casos extremos de configuración del grupo son:

  • Todos los grupos definen mínimos que en total representan el 100 por cien de los recursos del servidor. En este caso, los máximos efectivos son iguales a mínimos. Esto es equivalente a dividir los recursos del servidor en partes no superpuestas independientemente de que los recursos se utilizan dentro de un grupo determinado.

  • Todos los grupos tienen mínimos cero. Todos los grupos compiten por los recursos disponibles y sus tamaños finales están basados en el consumo de cada grupo. Otros factores, como pueden ser las directivas, representan un papel importante a la hora de determinar el tamaño final del grupo.

El regulador de recursos predefine dos grupos de recursos de servidor, el grupo interno y el grupo predeterminado.

Grupo interno

El grupo interno representa los recursos utilizados por el SQL Server. Este grupo siempre contiene el grupo interno únicamente y el grupo no se puede alterar de ninguna forma. El consumo de recurso por el grupo interno no está restringido. Cualquier carga de trabajo en el grupo está considerada como crítica para la función del servidor y el regulador de recursos permite al grupo interno presionar a otros grupos, incluso aunque esto signifique infringir los límites establecidos para el resto de grupos.

[!NOTA]

El grupo interno y el uso de recursos de grupo interno no se restan del uso de recursos totales. Los porcentajes se calculan a partir de los recursos totales disponibles.

Grupo predeterminado

El grupo predeterminado es el primer grupo de usuario predefinido. Antes de cualquier configuración, el grupo predeterminado contiene sólo al grupo predeterminado. El grupo predeterminado no se puede crear o eliminar, pero se puede modificar. El grupo predeterminado puede contener grupos definidos por el usuario, además del grupo predeterminado.

[!NOTA]

El grupo predeterminado se puede modificar, pero no puede moverse fuera del grupo predeterminado.

Grupos de recursos de servidor definidos por el usuario

El regulador de recursos proporciona instrucciones de DDL para crear, modificar y eliminar grupos de recursos de servidor. Para obtener más información, vea DDL del regulador de recursos y vistas del sistema.

Grupos de cargas de trabajo

Un grupo de cargas de trabajo sirve como contenedor para las solicitudes de sesión que sean similares de acuerdo con los criterios de clasificación que se aplican a cada solicitud. Un grupo de cargas de trabajo permite la supervisión agregada del consumo de recursos y la aplicación de una directiva uniforme a todas las solicitudes en el grupo. Un grupo define las directivas para sus miembros.

[!NOTA]

Los grupos de cargas de trabajo definidos por el usuario se pueden mover de un grupo de recursos de servidor a otro.

El regulador de recursos predefine dos grupos de cargas de trabajo: el grupo interno y el grupo predeterminado. Un usuario no puede cambiar nada que esté clasificado como grupo interno, pero puede supervisarlo. Las solicitudes se clasifican en el grupo predeterminado cuando se dan las condiciones siguientes:

  • No hay ningún criterio para clasificar una solicitud.

  • Hay un intento de clasificar la solicitud en un grupo inexistente.

  • Hay un error de clasificación general.

El regulador de recursos también proporciona instrucciones DLL para crear, cambiar y quitar grupos de cargas de trabajo. Para obtener más información, vea DDL del regulador de recursos y vistas del sistema.

Clasificación

El regulador de recursos admite la clasificación de sesiones de entrada. La clasificación se basa en un conjunto de criterios escritos por el usuario contenidos en una función. Los resultados de la lógica de la función permiten al regulador de recursos clasificar las sesiones en los grupos de cargas de trabajo existentes.

[!NOTA]

El grupo de cargas de trabajo interno se rellena con las solicitudes que sólo son para uso interno. No se pueden cambiar los criterios que se usan para enrutar estas solicitudes y no se pueden clasificar las solicitudes en el grupo de cargas de trabajo interno.

Puede escribir una función escalar que contenga la lógica que se utiliza para asignar las sesiones entrantes a un grupo de cargas de trabajo. Para poder ejecutar esta función, debe completar las acciones siguientes:

  • Crear y registrar la función utilizando la instrucción ALTER RESOURCE GOVERNOR. Para obtener más información, vea ALTER RESOURCE GOVERNOR (Transact-SQL).

  • Actualizar la configuración del regulador de recursos utilizando la instrucción ALTER RESOURCE GOVERNOR con el parámetro RECONFIGURE.

Después de crear la función y aplicar los cambios de configuración, el clasificador del regulador de recursos utilizará el nombre del grupo de cargas de trabajo devuelto por la función para enviar una nueva solicitud al grupo de cargas de trabajo adecuado.

Nota importanteImportante

La sesión del cliente puede expirar si la función de clasificación no se completa dentro del tiempo de espera especificado para el inicio de sesión. El tiempo de espera de inicio de sesión es una propiedad del cliente y como a tal, el servidor no está al tanto de los tiempos de espera. Una función clasificadora que se ejecute durante un tiempo prolongado puede dejar al servidor con conexiones huérfanas durante largos períodos de tiempo. Es importante que cree funciones clasificadoras que finalicen su ejecución antes de que se acabe el tiempo de espera de la conexión.

La función definida por el usuario tiene las siguientes características y comportamientos:

  • La función definida por el usuario se evalúa para cada nueva sesión, incluso cuando la agrupación de conexiones esté habilitada.

  • La función definida por el usuario proporciona el contexto del grupo de cargas de trabajo para la sesión. Una vez determinada la pertenencia al grupo, la sesión se enlaza al grupo de cargas de trabajo durante la vigencia de la sesión.

  • Si la función definida por el usuario devuelve NULL, predeterminado o el nombre de un grupo que no existe, la sesión recibirá el contexto del grupo de cargas de trabajo predeterminado. La sesión también recibe el contexto predeterminado si se produce un error en la función por cualquier motivo.

  • La función se debería definir con ámbito del servidor (base de datos maestra).

  • La designación de la función clasificadora definida por el usuario sólo surte efecto después de ejecutar ALTER RESOURCE GOVERNOR RECONFIGURE.

  • Sólo se puede definir una función definida por el usuario como clasificador a la vez.

  • La función del clasificador definida por el usuario no se puede eliminar o modificar a menos que se quite su estado de clasificador.

  • Con la ausencia de una función del clasificador definida por el usuario, todas las sesiones se clasifican en el grupo predeterminado.

  • El grupo de cargas de trabajo devuelto por la función clasificadora está fuera del ámbito de la restricción del enlace de esquema. Por ejemplo, no puede quitar una tabla, pero puede quitar un grupo de cargas de trabajo.

Nota importanteImportante

Se recomienda habilitar la conexión de administrador dedicada (DAC) en el servidor. La conexión de administrador dedicada no está sujeta a la clasificación del regulador de recursos y se puede utilizar para supervisar y solucionar problemas de una función clasificadora. Para obtener más información, vea Usar una conexión de administrador dedicada. Si no hay disponible una conexión de administrador dedicada para solucionar los problemas, la otra opción es reiniciar el sistema en modo de usuario único. Aunque el modo de usuario único no está sujeto a clasificación, no ofrece la capacidad de diagnosticar la clasificación del regulador de recursos mientras se ejecuta.

Proceso de clasificación

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

  1. Autenticación del inicio de sesión

  2. Ejecución del desencadenador LOGON

  3. Clasificación

Cuando la clasificación se inicia, el regulador de recursos ejecuta la función clasificadora y utiliza el valor devuelto por la función para enviar solicitudes al grupo de cargas de trabajo adecuado. Para obtener más información, vea Consideraciones para escribir una función clasificadora.

[!NOTA]

La información sobre la ejecución de la función clasificadora y sobre los desencadenadores LOGON se expone en sys.dm_exec_sessions y sys.dm_exec_requests.