En este documento, se describe cómo puedes configurar y usar grupos de recursos de MySQL en Cloud SQL para MySQL para administrar y priorizar la asignación de recursos de CPU de tus diferentes necesidades de procesamiento de datos.
Descripción general
Los grupos de recursos de MySQL, que se introdujeron en MySQL 8.0, te permiten administrar y priorizar la asignación de recursos de CPU entre diferentes subprocesos que se ejecutan en una sola instancia de base de datos. Esto es útil para mitigar el problema del "vecino ruidoso", en el que las tareas de baja prioridad, como los informes de análisis o por lotes diarios, pueden aumentar el uso de la CPU y degradar el rendimiento de las conexiones de clientes críticas y de alta prioridad, como el procesamiento de transacciones en línea (OLTP).
Los grupos de recursos son compatibles con todas las instancias de Cloud SQL para MySQL 8.0 y versiones posteriores, tanto la edición Enterprise de Cloud SQL como la edición Enterprise Plus de Cloud SQL.
Diferencias entre los grupos de recursos de MySQL de la comunidad y de Cloud SQL
Cloud SQL para MySQL es un servicio completamente administrado. Para garantizar la confiabilidad de la instancia y proteger los procesos internos de Cloud SQL, se aplican las siguientes diferencias y restricciones en comparación con el comportamiento de MySQL de la comunidad:
- No se admite la afinidad de núcleos de CPU
- Grupos de recursos del sistema prohibidos
- Registro binario y replicación automáticos de DDL de grupos de recursos
- Privilegios administrativos otorgados previamente
No se admite la afinidad de núcleos de CPU
No se admite la especificación de la fijación de CPU a nivel del núcleo. Por ejemplo, no puedes especificar VCPU = 2-3 o VCPU = 0 cuando creas un grupo de recursos en Cloud SQL para MySQL. Dado que se abstrae la topología del núcleo de la VM subyacente, cualquier intento de usar la cláusula VCPU en una sentencia CREATE RESOURCE GROUP o ALTER RESOURCE GROUP falla con el siguiente error de acceso denegado.
ERROR 1227 (42000): Access denied; This operation (CPU clause)
is not allowed on the Cloud SQL environment. Only THREAD_PRIORITY allowed;
Grupos de recursos del sistema prohibidos
No se admite la creación de grupos de recursos del sistema en Cloud SQL.
Solo se permiten los grupos de recursos a nivel del usuario (TYPE = USER), con prioridades de subprocesos que van de 0 (prioridad de usuario más alta) a 19 (prioridad de usuario más baja).
Los grupos de recursos del sistema están prohibidos para evitar que las cargas de trabajo del usuario interrumpan los trabajos críticos en segundo plano de Cloud SQL, como las copias de seguridad, la supervisión y la replicación.
La ejecución del comando CREATE RESOURCE GROUP con TYPE = SYSTEM fallará con el siguiente error:
ERROR 1227 (42000): Access denied; This operation (TYPE=SYSTEM) is
not allowed on the Cloud SQL environment. Only TYPE=USER is allowed;
Registro binario y replicación automáticos de DDL de grupos de recursos
En MySQL de la comunidad, las operaciones de grupos de recursos, como CREATE, ALTER y DROP RESOURCE GROUP, nunca se escriben en el registro binario. Cloud SQL anula este comportamiento predeterminado para que todos los comandos de definición de grupos de recursos se escriban en el registro binario.
Esto garantiza que los grupos de recursos se repliquen automáticamente en las réplicas de lectura, lo que te permite usar sugerencias del optimizador de consultas (o sugerencias RESOURCE_GROUP) en las réplicas para evitar fallas en las consultas debido a la falta de grupos.
Las definiciones de grupos también se capturan en el flujo de registro binario para la recuperación de un momento determinado (PITR).
Las asignaciones de sesiones de subprocesos, como SET RESOURCE GROUP, no se escriben en los registros binarios.
Los privilegios administrativos se otorgan a cloudsqlsuperuser
Para trabajar con grupos de recursos, necesitas los siguientes privilegios administrativos de la base de datos:
RESOURCE_GROUP_ADMIN: Crea, modifica y quita grupos de recursos.RESOURCE_GROUP_USER: Asigna subprocesos o usa sugerencias en las consultas.
En Cloud SQL, ambos privilegios se otorgan de forma predeterminada a la función cloudsqlsuperuser.
Los administradores de MySQL también pueden otorgar el privilegio de base de datos RESOURCE_GROUP_USER o RESOURCE_GROUP_ADMIN a otros usuarios.
Administra grupos de recursos en Cloud SQL
Puedes configurar y administrar grupos de recursos a nivel del usuario en Cloud SQL para optimizar la asignación de recursos en tu base de datos. Si lo haces, puedes controlar y priorizar la asignación de recursos de CPU entre varias cargas de trabajo de la sesión de la base de datos en la instancia.
Para obtener más detalles sobre la configuración de grupos de recursos de MySQL y el comportamiento de referencia, consulta Grupos de recursos en la documentación de MySQL.
Para administrar grupos de recursos en Cloud SQL, puedes hacer lo siguiente:
- Crea un grupo de recursos: Crea grupos de recursos a nivel del usuario y especifica prioridades de subprocesos personalizadas.
- Modifica la prioridad de un grupo de recursos: Ajusta la prioridad de programación de CPU de un grupo de recursos existente a nivel del usuario.
- Quita un grupo de recursos: Quita un grupo de recursos cuando ya no sea necesario.
- Asigna conexiones y consultas a un grupo de recursos: Asigna sesiones activas, usuarios de la base de datos o consultas específicas a un grupo de recursos.
- Supervisa grupos de recursos: Verifica los grupos de recursos configurados y las asignaciones de subprocesos.
Antes de comenzar
Antes de crear un grupo de recursos, verifica lo siguiente:
Accediste a la base de datos con una cuenta de usuario que tiene el privilegio
RESOURCE_GROUP_ADMIN. El usuariorootpredeterminado y cualquier cuenta de base de datos a la que se le asigne la funcióncloudsqlsuperusertienen este privilegio de forma predeterminada.Tu instancia de Cloud SQL ejecuta MySQL 8.0 o una versión posterior.
Crea un grupo de recursos
Crea grupos de recursos a nivel del usuario con una prioridad de subprocesos entre 0 (prioridad más alta) y 19 (prioridad más baja). La prioridad de subprocesos predeterminada para las conexiones estándar es 0.
Para crear un grupo de recursos, ejecuta la siguiente instrucción:
CREATE RESOURCE GROUP GROUP_NAME TYPE = USER THREAD_PRIORITY = PRIORITY_VALUE;
Reemplaza lo siguiente:
GROUP_NAME: Es el nombre del grupo de recursos que deseas crear.PRIORITY_VALUE: Es la prioridad de programación de CPU para el grupo de recursos, de0(prioridad más alta) a19(prioridad más baja).
Modifica la prioridad de un grupo de recursos
Para modificar la prioridad de programación de CPU de un grupo de recursos existente, ejecuta la siguiente instrucción:
ALTER RESOURCE GROUP GROUP_NAME THREAD_PRIORITY = PRIORITY_VALUE;
Reemplaza lo siguiente:
GROUP_NAME: Es el nombre del grupo de recursos que deseas modificar.PRIORITY_VALUE: Es la nueva prioridad de programación de CPU.
Quita un grupo de recursos
Para quitar un grupo de recursos, ejecuta la siguiente instrucción:
DROP RESOURCE GROUP GROUP_NAME;
Reemplaza lo siguiente:
GROUP_NAME: Es el nombre del grupo de recursos que deseas quitar.
Asigna conexiones y consultas a un grupo de recursos
Para aplicar restricciones de recursos en una carga de trabajo, asigna conexiones activas o consultas específicas a tus grupos de recursos del usuario.
Para asignar conexiones de sesión a un grupo, haz lo siguiente:
Otorga permiso al usuario de la carga de trabajo:
GRANT RESOURCE_GROUP_USER ON *.* TO 'USERNAME'@'%';
Reemplaza lo siguiente:
USERNAME: Es el usuario de la base de datos al que deseas otorgar el privilegio.
Cuando el usuario se conecte, ejecuta lo siguiente:
SET RESOURCE GROUP GROUP_NAME;
Reemplaza lo siguiente:
GROUP_NAME: Es el nombre del grupo de recursos al que deseas asignar la conexión.
O bien, especifica un ID de subproceso específico:
SET RESOURCE GROUP GROUP_NAME FOR THREAD_ID;
Reemplaza lo siguiente:
GROUP_NAME: Es el nombre del grupo de recursos al que deseas asignar la conexión.THREAD_ID: Es el ID del subproceso de base de datos específico que deseas asignar.
Para asignar una sola consulta a un grupo (a través de una sugerencia del optimizador), haz lo siguiente:
Usa la sugerencia de comentario del optimizador RESOURCE_GROUP en tu instrucción DML o SELECT:
SELECT /*+ RESOURCE_GROUP(GROUP_NAME) */ COLUMN_NAME_1, SUM(COLUMN_NAME_2) FROM TABLE_NAME GROUP BY COLUMN_NAME_1;
Reemplaza lo siguiente:
GROUP_NAME: Es el nombre del grupo de recursos en el que deseas ejecutar la consulta.COLUMN_NAME_1: Es la columna por la que deseas agrupar tus resultados.COLUMN_NAME_2: Es el valor de la columna que deseas sumar.TABLE_NAME: Es la tabla que deseas consultar.
Supervisa grupos de recursos
Para inspeccionar los grupos de recursos configurados, haz lo siguiente:
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
Para ver los subprocesos de conexión activos y sus grupos de recursos asignados, ejecuta la siguiente consulta:
SELECT THREAD_ID, NAME, TYPE, RESOURCE_GROUP
FROM performance_schema.threads;