Grupo de recursos de servidor del regulador de recursos
Se aplica a: SQL Server
Azure SQL Managed Instance
En el regulador de recursos de SQL Server, un grupo de recursos representa un subconjunto de los recursos físicos de una instancia del motor de base de datos. El regulador de recursos permite especificar los límites en cuanto a la cantidad de CPU, E/S física y memoria del grupo de recursos de servidor que pueden usar las solicitudes entrantes procedentes de las aplicaciones. Cada grupo de recursos de servidor puede contener uno o más grupos de cargas de trabajo. Cuando se inicia una sesión, el clasificador del regulador de recursos asigna la sesión a un grupo de cargas de trabajo concreto y la sesión se debe ejecutar utilizando los recursos asignados al grupo de cargas de trabajo.
Conceptos de los 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 la reserva de recursos mínima. La otra parte se comparte con otros grupos, lo que permite consumir el número máximo de recursos. Los recursos del grupo se definen especificando uno o varios de los siguientes valores para cada recurso (CPU, memoria y E/S física):
MIN_CPU_PERCENT y MAX_CPU_PERCENT
Esta configuración es el ancho de banda medio de CPU mínimo y máximo garantizado para todas las solicitudes del grupo de recursos cuando hay contención de CPU. Puede utilizar estos valores para establecer un uso de recursos de la CPU predecible para varias cargas de trabajo que se basa en las necesidades de cada carga de trabajo. Por ejemplo, suponga que los departamentos de ventas y marketing de una empresa comparten la misma base de datos. El departamento de ventas tiene una carga de trabajo intensiva de CPU con consultas de alta prioridad. El departamento de marketing también tiene una carga de trabajo intensiva de CPU, pero tiene consultas de baja prioridad. Si crea un grupo de recursos de servidor independiente para cada departamento, puede asignar un porcentaje de CPU mínimo de 70 para el grupo de recursos de servidor de ventas y un porcentaje máximo de CPU de 30 para el grupo de recursos de servidor de marketing. Esta configuración garantiza que la carga de trabajo de ventas recibe los recursos de CPU que necesita y la carga de trabajo de marketing está aislada de las demandas de CPU de la carga de trabajo de ventas. El porcentaje máximo de CPU es un máximo oportunista. Si hay capacidad de CPU disponible, los subprocesos de trabajo lo usan todo, hasta un 100 %. El valor máximo solo se aplica cuando hay contención para los recursos de CPU. En este ejemplo, si la carga de trabajo de ventas se desactiva, la carga de trabajo de marketing puede utilizar el 100 por cien de la CPU si es necesario.
CAP_CPU_PERCENT
El valor CAP_CPU_PERCENT constituye un límite máximo en cuanto al ancho banda de la CPU para todas las solicitudes del grupo de recursos. Las cargas de trabajo asociadas al grupo pueden usar la capacidad de CPU por encima del valor de MAX_CPU_PERCENT si está disponible, pero no por encima del valor de CAP_CPU_PERCENT. En función del ejemplo de la sección anterior, supongamos que el departamento de marketing se está cobrando por su uso de recursos. Quieren una facturación predecible y no quieren pagar por más del 30 % de la CPU. Este objetivo se puede lograr estableciendo el CAP_CPU_PERCENT en 30 para el grupo de recursos de marketing.
MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT
Esta configuración es la cantidad mínima y máxima de memoria reservada para el grupo de recursos que no se puede compartir con otros grupos de recursos. En el caso de las bases de datos sin tablas optimizadas para memoria, la memoria a la que se hace referencia es la memoria de concesión de ejecución de consultas, no la memoria del grupo de búferes (páginas de datos e índices). Para obtener más información sobre las concesiones de memoria de ejecución de consultas, consulte Consideraciones sobre concesión de memoria. Establecer un valor de memoria mínimo para un grupo garantiza que el porcentaje de memoria especificado esté disponible para las solicitudes que se ejecutan en este grupo de recursos. Esta configuración es diferente de MIN_CPU_PERCENT, ya que, en este caso, la memoria puede permanecer en el grupo de recursos dado incluso cuando el grupo no tiene ninguna solicitud en los grupos de cargas de trabajo que pertenecen a este grupo. Por lo tanto, tenga cuidado al usar esta configuración, ya que esta memoria no está disponible para su uso por cualquier otro grupo, incluso cuando no haya solicitudes activas. Establecer un valor de memoria máximo para un grupo significa que, cuando las solicitudes se ejecutan en este grupo, nunca obtienen más de este porcentaje de memoria general.
Con el fin de controlar la memoria de las tablas optimizadas para memoria con Resource Governor, debe enlazar la base de datos a un grupo de recursos independiente. Para más información, consulte Enlace de una base de datos con tablas optimizadas para memoria a un grupo de recursos.
AFFINITY
Este valor permite establecer afinidad entre un grupo de recursos de servidor y uno o varios programadores o nodos NUMA para conseguir un mayor aislamiento de los recursos de CPU. Para usar el escenario de ventas y marketing de las secciones anteriores, supongamos que el departamento de ventas necesita un entorno más aislado y quiere un 100 % de un núcleo de CPU en todo momento. Mediante la opción AFFINITY, las cargas de trabajo de ventas y marketing se pueden programar para que se ejecuten en CPU distintas. Suponiendo que sigue vigente CAP_CPU_PERCENT para el grupo de marketing, la carga de trabajo de marketing continúa utilizando un máximo del 30 por ciento de un núcleo, mientras que la carga de trabajo de ventas utiliza el 100 por cien del otro núcleo. En lo que respecta a las cargas de trabajo de ventas y marketing, se ejecutan en dos equipos aislados.
MIN_IOPS_PER_VOLUME y MAX_IOPS_PER_VOLUME
Estos valores representan el número mínimo y máximo de operaciones de E/S físicas por segundo (IOPS) por cada volumen de disco para un grupo de recursos de servidor. Puede utilizar estos valores para controlar las E/S físicas emitidas para los subprocesos de usuario para un grupo de recursos de servidor determinado. Por ejemplo, el departamento de ventas genera varios informes de fin de mes en lotes grandes. Las consultas de estos lotes pueden generar E/S que pueden saturar el volumen de disco y afectar al rendimiento de otras cargas de trabajo de mayor prioridad en la base de datos. Para aislar esta carga de trabajo, el MIN_IOPS_PER_VOLUME se establece en 20 y el MAX_IOPS_PER_VOLUME se establece en 100 para el grupo de recursos departamento de ventas. Esta configuración controla el nivel de E/S que se puede emitir para la carga de trabajo.
Grupos de recursos definidos por el sistema y el usuario
El regulador de recursos predefine dos grupos de recursos de servidor, el grupo interno y el grupo predeterminado. Puede crear grupos adicionales.
Grupo interno
El grupo interno representa los recursos utilizados por el propio SQL Server. Este grupo siempre contiene solo el grupo interno y el grupo no se puede modificar de ninguna manera. El consumo de recursos por parte del grupo interno no está restringido. Todas las cargas de trabajo del grupo se consideran críticas para la función de servidor. Por lo tanto, el regulador de recursos permite que el grupo interno presione otros grupos incluso si significa la infracción de los límites establecidos para los demás grupos.
Nota:
El grupo interno y el uso de recursos del 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 realizar cualquier configuración, el grupo de recursos de servidor predeterminado solo contiene el grupo predeterminado. No puede crear ni quitar el grupo predeterminado, pero puede modificarlo. El grupo de recursos de servidor predeterminado puede contener grupos definidos por el usuario además del grupo predeterminado. A partir de SQL Server 2016 (13.x), hay un grupo de recursos predeterminado para las operaciones de SQL Server rutinarias y un grupo de recursos externo predeterminado para procesos externos, como la ejecución de scripts de R.
Nota:
El grupo predeterminado se puede modificar, pero no puede moverse fuera del grupo de recursos de servidor predeterminado.
Grupo externo
Los usuarios pueden crear un grupo externo para definir recursos para los procesos externos. Para R Services, este grupo rige rterm.exe
, BxlServer.exe
, python.exe
y otros procesos generados por ellos. Para obtener más información, consulte CREATE EXTERNAL RESOURCE POOL
Grupos de recursos de servidor definidos por el usuario
Los grupos de recursos de servidor definidos por el usuario son los que se crean para las cargas de trabajo concretas de un entorno. El regulador de recursos proporciona instrucciones DDL para crear, modificar y quitar grupos de recursos de servidor. Para obtener más información, consulte Crear un grupo de recursos, Eliminar un grupo de recursos y Cambiar la configuración del grupo de recursos.
Asignación de recursos entre grupos
Al configurar CPU o memoria, la suma de valores MIN en todos los grupos no puede superar el 100 % de los recursos del servidor. Además, al configurar la CPU o la memoria, los valores MAX y CAP se pueden establecer en cualquier punto del intervalo entre el valor MIN y el 100 por cien inclusive.
Si un grupo tiene definido un valor MIN distinto de cero, el valor MAX efectivo de otros grupos se reajustará. El mínimo del valor MAX configurado de un grupo y la suma de los valores MIN de otros grupos se resta del 100 %.
En la tabla siguiente se muestran algunos de los conceptos anteriores. La tabla muestra los valores para el grupo interno, el grupo predeterminado y para dos grupos definidos por el usuario.
Nombre del grupo | Valor de % MIN | Valor de % MAX | % MAX efectivo calculado | % compartido calculado | Comentario |
---|---|---|---|---|---|
internal | 0 | 100 | 100 | 0 | El porcentaje máximo efectivo y el porcentaje compartido no se aplican al grupo interno. |
default | 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. |
Las fórmulas siguientes se usan para calcular el porcentaje máximo efectivo y el porcentaje compartido en la tabla:
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.
% total compartido = 100 - sum(% MIN).
% MAX efectivo = min(X,Y).
% compartido = % MAX efectivo - % MIN.
Si tomamos 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 |
---|---|---|---|---|---|
internal | 0 | 100 | 100 | 0 | El porcentaje máximo efectivo y el porcentaje compartido no se aplican al grupo interno. |
default | 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 consumen recursos, van al grupo especificado y no se comparten. Este comportamiento puede mejorar el uso de recursos en los casos en los que no hay solicitudes en un grupo determinado y los recursos configurados para el grupo se pueden liberar 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 que los mínimos. Esto equivale a dividir los recursos del servidor en partes no superpuestas, independientemente de los recursos que se consuman dentro de cualquier 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, desempeñan un rol importante a la hora de determinar el tamaño final del grupo.
Tareas de los grupos de recursos de servidor
Descripción de la tarea | Artículo |
---|---|
Describe cómo crear un grupo de recursos de servidor. | Crear un grupo de recursos de servidor |
Describe cómo cambiar la configuración del grupo de recursos de servidor. | Cambiar la configuración del grupo de recursos de servidor |
Describe cómo eliminar un grupo de recursos de servidor. | Eliminar un grupo de recursos de servidor |