Cuando los archivos del sistema agotan el almacenamiento (por lo general, un archivo undo demasiado grande), la instancia de RDS entra en estado Locking. Expanda el almacenamiento para desbloquear la instancia y después limpie el archivo undo según su versión de MySQL.
Cómo funciona
Las consultas de larga duración en tablas InnoDB generan datos undo cuando se combinan con operaciones de escritura simultáneas de gran volumen. Si estos datos llenan el almacenamiento disponible, el sistema bloquea la instancia de RDS para evitar la pérdida de información.
Este problema no ocurre en MySQL 8.0. El sistema elimina automáticamente el archivo undo en las instancias de MySQL 8.0.
Paso 1: Desbloquear la instancia
Expanda la capacidad de almacenamiento de la instancia bloqueada. Una vez que finalice la expansión, la instancia saldrá del estado Locking. Para más detalles, consulte Change instance specifications.
Paso 2: Limpiar el archivo undo
El método de limpieza depende de la versión de MySQL y de cómo se creó la instancia. Utilice la tabla a continuación para identificar su situación.
|
Versión de MySQL |
**Valor de |
Ubicación del archivo undo |
¿Se puede eliminar? |
|
8.0 |
N/A |
N/A |
Automático (no requiere acción) |
|
5.7 |
2 |
Tablespaces undo independientes |
Sí, el sistema lo trunca automáticamente |
|
5.7 |
0 (predeterminado) |
Tablespace del sistema |
No |
|
5.5 o 5.6 |
N/A |
Tablespace del sistema |
No |
MySQL 5.7 con innodb_undo_tablespaces = 2
Ejecute el siguiente SQL para comprobar el valor del parámetro en su instancia. Para obtener instrucciones de conexión, consulte Connect to an ApsaraDB RDS for MySQL instance.
SHOW VARIABLES LIKE 'innodb_undo_tablespaces';
Si el resultado es 2, los datos undo se almacenan en tablespaces undo independientes y se pueden liberar. El sistema trunca el archivo undo automáticamente cuando su tamaño supera el umbral innodb_max_undo_log_size y las transacciones activas ya no necesitan los registros de dicho archivo. Para reducir el umbral de truncamiento, consulte Modify instance parameters.
El parámetro innodb_undo_tablespaces solo se establece al crear la instancia y no se puede modificar después. En las instancias de MySQL 5.7 donde este parámetro no se configuró durante la creación, toma el valor predeterminado 0. Esto significa que los tablespaces undo independientes no están habilitados.
MySQL 5.7 con innodb_undo_tablespaces = 0, o MySQL 5.5/5.6
El archivo undo se almacena dentro del tablespace del sistema ibdata1 y no se puede eliminar directamente. Elija una de a continuación opciones:
Opción 1 (recomendada): Actualizar a MySQL 8.0
Actualice la versión principal del motor a MySQL 8.0, que gestiona la limpieza del archivo undo automáticamente. Consulte Upgrade the major engine version.
Opción 2: Migrar a una nueva instancia
Cree una nueva instancia de RDS con la configuración deseada y migre los datos desde la instancia original.
Opción 3: Actualizar MySQL 5.5 o 5.6 a MySQL 5.7 (High-availability Edition)
Si usa MySQL 5.5 o 5.6, actualice a MySQL 5.7. Establezca Edition en High-availability Edition durante la actualización. De esta forma, innodb_undo_tablespaces tomará el valor 2 en la nueva instancia y la limpieza automática de undo quedará habilitada de ahora en adelante. Consulte Upgrade the major engine version.
Antes de actualizar o migrar:
Revise las diferencias de compatibilidad entre versiones principales del motor descritas en Upgrade the major engine version.
Durante el proceso ocurre un cambio de instancia. Programe la operación fuera del horario de mayor actividad y configure su aplicación para que se reconecte automáticamente. Consulte Impacts of an instance switchover.
Evitar que el problema vuelva a ocurrir
Para evitar que los archivos undo crezcan sin control:
Optimice las sentencias SQL lentas para reducir la duración de las consultas largas.
Programe las operaciones DDL (cambios de índices, modificaciones de esquema, mantenimiento y eliminación de tablas) fuera del horario de mayor actividad.
Monitoree y finalice las sesiones y transacciones de larga duración. Consulte View monitoring information.
Habilite la expansión automática de almacenamiento para que la instancia crezca antes de alcanzar el límite. Consulte Configure automatic storage expansion.
Utilice el servicio de autonomía para detectar y mitigar las consultas descontroladas antes de que agoten el almacenamiento. Consulte Use the automatic SQL optimization feature y Use the automatic SQL throttling feature.
Temas relacionados
Si otros tipos de archivos contribuyen al agotamiento del almacenamiento, consulte: