Resource Group. Funcionalidad MySQL 8

Hola a tod@s, hoy queríamos compartir con vosotros otra funcionalidad de MySQL 8 que está relacionada con la limitación de recursos de MySQL que comentamos en un post anterior. La funcionalidad se llama Resource Group y nos permite la posibilidad de modificar los hilos de procesos para utilizar unos recursos concretos y asignar prioridad a los mismos.

Antes de explicar su utilización hay que revisar el concepto de VCPU:

Para controlar la utilización de CPU se ha creado el concepto de «virtual CPU» y que incluye CPU cores, hyperthreads o hardware threads. En el arranque, el servidor determina el número de virtual CPUs disponibles. Por ejemplo, para la ejecución de un proceso batch que no requiera de mucha prioridad, el DBA puede crear un resource group llamado Batch y ajustar su prioridad acorde con la utilización del servidor. Se puede por ejemplo asignar mayor prioridad por la noche y bajar por el día para no interferir los procesos del resto de usuarios.

Sintaxis de Create Resource Group

La sintaxis para su utilización es:

 CREATE RESOURCE GROUP group_name
     TYPE = {SYSTEM|USER}
     [VCPU [=] vcpu_spec [, vcpu_spec] ...]
     [THREAD_PRIORITY [=] N]
     [ENABLE|DISABLE] 

Los parámetros que se configuran son:

  • El atributo group_name identifica el nombre del grupo que se va a crear, si ya existe se producirá un error.
  • El atributo VCPU indica la afinidad de CPU, esto significa el grupo de CPU’s virtuales que el grupo puede utilizar.
    • Si no se indica, se pueden utilizar todas las CPU’s disponibles,
    • Si se indica, se debe poner las CPU’s que se pueden utilizar separadas por comas o rango. Ejemplo. VCPU = 0-3,9-10. El ranfo va desde 0 al número totales de CPU’s – 1
  • El atributo THREAD_PRIORITY indica la propiedad de los threads asignados al grupo. Si no se indica, el valor por defecto es 0. El rango puede ir de -20 (mayor prioridad) a 19 (menor prioridad) . Los procesos de sistema se deben configurar de -20 a 0 y los de usuario de 0 a 19.
  • El atributo ENABLE|DISABLE indica si el grupo se activa o no. Por defecto es ENABLE.

Ejemplo de creación de un grupo de recursos

Un ejemplo de creación de un grupo puede ser:

create resource group mysql 8 gpsos

En este caso, se crea un grupo llamado Batch asignado a dos CPU’s y con prioridad media (10).

Por defecto, se crean dos grupos en versión 8, llamados SYS_default y USR_default. No se pueden borrar ni sus atributos ser modificados. Cada uno de los grupos no tiene afinidad sobre VCPU’s y la prioridad es 0. Todos los usuarios nuevos, dependiendo del tipo que sean, se asignan a estos grupos.

Podemos cambiar la prioridad de un proceso en ejecución con el siguiente comando:

SET RESOURCE GROUP Batch FOR thread_id;

Otra forma de asignar prioridad a un proceso es ejecutar el siguiente comando desde el propio usuario:

 SET RESOURCE GROUP Batch; 

Esta funcionalidad se utiliza cuando se quiere realizan un tuning muy fino de Mysql y se tiene que tener muy claro lo que se está haciendo, ya que puede hacer que procesos que antes se ejecutaban sin problemas empiecen a ir muy lentos y sea complicado ver el por qué.

Esperamos que os haya gustado esta nueva funcionalidad.

Equipo DBA.

Si no quieres perderte más trucos como este, suscríbete a nuestra newsletter mensual. Nos vemos en próximas entradas.

Más info: https://dev.mysql.com/doc/refman/8.0/en/resource-groups.html