Account Resource Limits. Funcionalidad MySQL 8

Hola a tod@s, hoy queríamos compartir con vosotros una nueva funcionalidad de MySQL 8 que puede ser muy interesante y que parece que viene heredada directamente de Oracle. Esta funcionalidad es la utilización de limitación de recursos de MySQL asignada a una cuenta de acceso (Account Resource Limits).

¿Cómo se limitaban recursos hasta ahora?

Hasta ahora, la forma de restringir el uso del cliente de los recursos del servidor MySQL era configurar la variable global del sistema max_user_connections en un valor distinto de cero. Esto limitaba el número de conexiones simultáneas que puede realizar cualquier cuenta, pero no establece límites sobre lo que un cliente puede hacer una vez conectado. Además, la configuración de max_user_connections no habilita la administración de cuentas individuales ya que aplicaba a cualquier sesión conectada a MySQL, sin poder limitar las de un usuario en concreto.

Para abordar este tipo de problemas, MySQL desde la versión 8 permite aplicar límites para cuentas individuales en el uso de los siguientes recursos del servidor:

  • El número de consultas que puede ejecutar una cuenta por hora.
  • El número de actualizaciones que puede ejecutar una cuenta de usuario por hora.
  • El número de veces que una cuenta de usuario puede conectarse al servidor por hora.
  • El número de conexiones simultáneas al servidor por una cuenta.

Una «cuenta» en este contexto corresponde a una fila en la tabla del sistema mysql.user. Es decir, una conexión se evalúa con los valores de Usuario y Host en la fila de la tabla de usuario que se aplica a la conexión. Por ejemplo, una cuenta ‘user’@’%.example.com’ corresponde a una fila en la tabla de usuario que tiene valores de Usuario y Host de user y% .example.com, para permitir que user se conecte desde cualquier host en el dominio de ejemplo .com. En este caso, el servidor aplica los límites de recursos en esta fila colectivamente a todas las conexiones de user desde cualquier host en el dominio example.com porque todas esas conexiones usan la misma cuenta.

Establecer límites de Account Resource Limits

Para establecer límites de recursos para una cuenta en el momento de la creación de la cuenta se utiliza CREATE USER. Para modificar los límites de una cuenta existente, se hace desde ALTER USER. Un ejemplo de las sentencias son estas:

Account Resource Limits MySQL 8 gpsos

Para modificar los recursos de una cuenta se utiliza el comando alter de la siguiente forma:

mysql> ALTER USER 'test'@'localhost' WITH MAX_QUERIES_PER_HOUR 100;

Para eliminar el límite se establece su valor a cero:

mysql> ALTER USER 'test'@'localhost' WITH MAX_QUERIES_PER_HOUR 0;

El servidor va acumulando los distintos contadores y cuando se llega a los límites configurados, el servidor no permite nuevas conexiones o comandos, dependiendo del límite del recurso al que se ha llegado. Si se necesita que se reinicien los contadores se nuevo se pueden utilizan los siguientes comandos:

  • Para resetear todos los contadores de todas las cuentas se ejecuta el comando FLUSH USER RESOURCES. Hay que tener cuidado, porque el comando FLUSH PRIVILEGES también los resetea.
  • Para resetear un contador en concreto de un usuario se puede hacer si hacemos un reset de valor a cero y luego volvemos a poner el mismo.

Aparte de estos límites que son interesantes se han creado también grupos de recursos para poder acotar todavía más la utilización de nuestro servidor, pero eso lo veremos en un post posterior.

Un saludo y esperamos que os sea muy útil.

Equipo DBA.

Si no quieres perderte ninguna de las entradas, suscríbete a nuestra newsletter mensual. Con ella recibirás todas nuestras publicaciones.

Más info: https://docs.oracle.com/cd/E17952_01/mysql-5.6-en/user-resources.html