Cuando una instancia de RDS entra en el estado Locking, las instrucciones INSERT y UPDATE fallan. Este tema explica las causas, cómo resolver cada una y cómo evitar que vuelvan a ocurrir.
Comprender el comportamiento de bloqueo
El estado Locking tiene diferentes efectos según la versión del motor de base de datos y la versión menor del motor.
MySQL 5.6, 5.7 y 8.0 (versión menor del motor 20190815 o posterior)
ApsaraDB RDS utiliza tres tipos de bloqueo para limitar las operaciones según la causa del bloqueo:
|
Tipo de bloqueo |
Qué bloquea |
Condición de activación |
|
|
Operaciones que aumentan el uso de disco (INSERT, UPDATE). Las consultas de lectura continúan funcionando. Utilice DROP o TRUNCATE en lugar de DELETE para liberar espacio, ya que DELETE genera registros binarios que incrementan el uso de disco. |
El almacenamiento de la instancia principal está lleno. |
|
|
Todas las operaciones de lectura y escritura. |
El almacenamiento de la instancia de solo lectura está lleno. |
|
|
Todas las operaciones de escritura, incluidas DROP y TRUNCATE (superconjunto de las restricciones de |
Vencimiento de la instancia, vencimiento del host en un clúster de ApsaraDB MyBase o migración de la instancia. |
Cuando LOCK_WRITE_GROWTH está activo, las instrucciones SQL devuelven:
ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement
MySQL 5.1, 5.5 y MySQL 5.6/5.7/8.0 con versión menor del motor anterior a 20190815
Todas las operaciones se bloquean independientemente de la causa del bloqueo.
Diagnosticar la causa
En la página Basic Information de su instancia de RDS, consulte la sección Usage Statistics. Las dos posibles causas son:
Causa 1: La capacidad de almacenamiento está agotada.
Causa 2: Su cuenta de Alibaba Cloud tiene pagos pendientes o la instancia de RDS ha vencido.

Resolver la causa 1: capacidad de almacenamiento agotada
Hay dos opciones disponibles: ampliar la capacidad de almacenamiento o liberar almacenamiento. Ampliar el almacenamiento es más rápido y no requiere eliminar datos.
Opción 1: ampliar la capacidad de almacenamiento (recomendado)
Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside la instancia y luego haga clic en el ID de la instancia.
En la página Basic Information, vaya a la sección Configuration Information y haga clic en Change Specifications para expand the storage capacity.
Complete el pago. Haga clic en el icono
en la esquina superior derecha de la página Basic Information para monitorear el progreso en la página Tasks.
El tiempo requerido varía según el tipo de almacenamiento:
|
Tipo de almacenamiento |
Duración |
Notas |
|
Premium Local SSDs |
Variable |
Puede producirse una migración de datos entre instancias. Se espera una conexión transitoria de aproximadamente 30 segundos. Realice la ampliación fuera del horario pico y asegúrese de que su aplicación se reconecte automáticamente. |
|
Discos en la nube |
Aproximadamente 5 minutos |
MySQL y PostgreSQL: sin conexiones transitorias. SQL Server: puede producirse una conexión transitoria de aproximadamente 30 segundos. Realice la ampliación fuera del horario pico o asegúrese de que su aplicación se reconecte automáticamente. Ciertas instancias de RDS admiten la ampliación de la capacidad de almacenamiento sin pérdida de datos. Esto no interrumpe sus cargas de trabajo. |
Después de la ampliación, el ID de la instancia y la cadena de conexión permanecen sin cambios. Sin embargo, la dirección IP puede cambiar; por ejemplo, cuando la ampliación de Premium Local SSDs desencadena una migración de datos entre instancias. Conéctese a la instancia mediante la cadena de conexión (nombre de dominio) en lugar de la dirección IP.
También puede iniciar sesión en la consola de ApsaraDB RDS y hacer clic en Task Center en el panel de navegación izquierdo para ver el progreso.
Opción 2: liberar almacenamiento
Realice una copia de seguridad de sus datos antes de eliminar cualquier elemento. Si es posible, amplíe el almacenamiento para evitar la pérdida de datos.
Vaya a la página Instances. Seleccione la región y luego haga clic en el ID de la instancia.
-
En el panel de navegación izquierdo, haga clic en Monitoring and Alerts para ver el uso de almacenamiento desglosado por tipo de datos.

Elimine datos según la categoría de almacenamiento que esté consumiendo más espacio.
Archivos temporales (métrica temp_file_size)
ApsaraDB RDS for MySQL genera tablas temporales para operaciones de ordenamiento, agrupación o unión, así como archivos de caché de registros binarios antes de confirmar transacciones grandes. Estos archivos temporales pueden agotar el espacio en disco.
Para los pasos de resolución, consulte What do I do if an ApsaraDB RDS for MySQL instance is in the Locked state because its storage capacity is exhausted by temporary files?
Archivos de registro (métricas binlog_size y general_log_size)
|
Motor de base de datos |
Resolución |
|
MySQL |
En la página Monitoring and Alerts, consulte el uso de almacenamiento y luego elimine los archivos de registro. Consulte What do I do if the storage capacity of an ApsaraDB RDS for MySQL instance is exhausted by binary log files? y FAQ about the general query log feature of ApsaraDB RDS for MySQL. |
|
PostgreSQL |
Los archivos de registro no se pueden eliminar manualmente. Elimine las ranuras de replicación inactivas para permitir que AliPG elimine automáticamente los registros WAL. Consulte Use the WAL log management feature for an ApsaraDB RDS for PostgreSQL instance. |
|
SQL Server |
Los archivos de registro no se pueden eliminar manualmente. Utilice Shrink transaction logs en la consola de ApsaraDB RDS. |
Archivos de datos (métrica user_data_size)
MySQL:
-
Ejecute la siguiente instrucción para encontrar las tablas más grandes:
SELECT TABLE_NAME, concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<Database name>' ORDER BY DATA + 0 DESC; -
Elimine las tablas innecesarias:
DROP TABLE <Table name>; Espere aproximadamente 5 minutos para que el sistema desbloquee la instancia.
PostgreSQL:
-
Conéctese a su instancia de RDS mediante DMS. Consulte Use DMS to log on to an ApsaraDB RDS instance.
Si no puede conectarse, amplíe primero la capacidad de almacenamiento, libere espacio en disco y luego reduzca la capacidad de almacenamiento según sea necesario. Consulte Change instance specifications .
-
Ejecute la siguiente instrucción para encontrar las tablas más grandes:
SELECT table_schema || '.' || table_name AS table_full_name, pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') AS size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC; -
Elimine las tablas innecesarias:
DROP TABLE <Table name>; Espere aproximadamente 5 minutos para que el sistema desbloquee la instancia.
SQL Server:
Siga los pasos en Troubleshoot insufficient storage issues on an ApsaraDB RDS for SQL Server instance.
Archivos de sistema (métrica undolog_size)
Las consultas de larga duración en tablas InnoDB combinadas con modificaciones masivas de datos concurrentes pueden provocar que el sistema genere registros de deshacer excesivos, lo que agota la capacidad de almacenamiento.
Para los pasos de resolución, consulte Troubleshoot insufficient storage caused by system file accumulation.
Resolver la causa 2: pagos pendientes o vencimiento de la instancia
Instancia de suscripción: Renew the instance, luego espere aproximadamente 5 minutos y compruebe si la instancia se encuentra en estado Running.
Instancia pay-as-you-go: Recargue saldo en su cuenta de Alibaba Cloud, luego espere 5 minutos y compruebe si la instancia se encuentra en estado Running.
Prevenir futuros bloqueos
Configure lo siguiente para evitar bloqueos inesperados:
Configurar notificaciones de pago y vencimiento:
Inicie sesión en la consola de ApsaraDB RDS.
Haga clic en el icono
en la esquina superior derecha para abrir Message Center.En el panel de navegación izquierdo, haga clic en Common Settings.
En la columna Notification Type, seleccione Product Overdue Payment, Suspension, and Imminent Release Notifications y haga clic en Modify.
Seleccione los contactos de alerta y haga clic en Save.
Configurar una alerta de uso de almacenamiento: Configure alert rules for storage usage y active una alerta cuando el uso de almacenamiento supere el 90%.
Habilitar SQL Explorer and Audit: Enable the SQL Explorer and Audit feature. Si el uso de almacenamiento aumenta repentinamente, consulte las instrucciones SQL ejecutadas durante el pico en la página Monitoring and Alerts y optimícelas.
Habilitar la ampliación automática de almacenamiento: Configure la ampliación automática de almacenamiento para que el sistema aumente la capacidad cuando el almacenamiento sea bajo. Consulte las guías para MySQL, PostgreSQL y SQL Server.
Optimizar instrucciones SQL: Evite el uso frecuente de cláusulas ORDER BY y GROUP BY en consultas que procesan grandes conjuntos de datos, ya que estas generan archivos temporales grandes.
Preguntas frecuentes
¿Por qué LOCK_WRITE_GROWTH sigue activo después de eliminar una gran cantidad de datos?
Ejecutar DELETE marca los registros como reutilizables, pero no reduce los archivos de disco subyacentes ni recupera el espacio de tabla. Para liberar espacio de tabla, utilice la instrucción OPTIMIZE TABLE. Consulte How do I use the OPTIMIZE TABLE statement to release the tablespace of an ApsaraDB RDS for MySQL instance?
¿Por qué mi instancia sigue bloqueada aunque el almacenamiento sea suficiente o la instancia se haya renovado?
Es posible que una tarea, como un cambio de configuración, aún esté en curso. La instancia se desbloquea automáticamente cuando finaliza la tarea. Haga clic en el icono
en la esquina superior derecha de la página Basic Information para comprobar el progreso de la tarea en la página Tasks.
Si el uso del disco ya ha descendido por debajo del 100% pero la instancia sigue bloqueada y no hay ninguna tarea en curso, esto es normal: el desbloqueo no es instantáneo. Pasa por tres etapas: un ciclo de detección periódica comprueba el uso del disco, se envía una tarea de desbloqueo una vez que una comprobación confirma que el uso es inferior al 100% y, a continuación, se ejecuta la tarea de desbloqueo. Por lo general, la instancia se desbloquea automáticamente en un plazo de 10 minutos después de que el uso del disco descienda por debajo del 100%.
¿Puedo cambiar las especificaciones de la instancia mientras esta se encuentra en estado Locking?
Si la instancia está bloqueada porque el almacenamiento está agotado, sí: puede actualizar o reducir las especificaciones. Si está bloqueada por otros motivos, como pagos pendientes, resuelva primero el problema de pago.
Mi instancia utiliza un tipo de instancia descontinuado. ¿Cómo la desbloqueo ampliando el almacenamiento?
Cambie primero el tipo de instancia a un tipo disponible y luego amplíe el almacenamiento. Para consultar los tipos de instancia disponibles, vea Primary ApsaraDB RDS instance types.
¿Por qué el uso de almacenamiento sigue aumentando aunque la instancia esté bloqueada?
INSERT y UPDATE están bloqueados, pero las consultas de lectura aún pueden generar archivos de registro o datos temporales, lo que incrementa el uso de almacenamiento.