Quando uma instância RDS entra no estado Locking, as instruções INSERT e UPDATE falham. Identifique a causa, desbloqueie a instância e evite a recorrência do problema.
Entenda o comportamento de bloqueio
Os efeitos do estado Locking variam conforme a versão do mecanismo de banco de dados e a versão secundária do mecanismo.
MySQL 5.6, 5,7 e 8.0 (versão secundária do mecanismo 20190815 ou posterior)
O ApsaraDB RDS utiliza três tipos de bloqueio para limitar operações, dependendo da causa:
|
Tipo de bloqueio |
O que é bloqueado |
Condição de acionamento |
|
|
Operações que aumentam o uso de disco (INSERT, UPDATE). Consultas de leitura continuam funcionando. Use DROP ou TRUNCATE em vez de DELETE para liberar espaço, pois o DELETE gera logs binários que aumentam o uso de disco. |
O armazenamento da instância primária está cheio. |
|
|
Todas as operações de leitura e escrita. |
O armazenamento da instância somente leitura está cheio. |
|
|
Todas as operações de escrita, incluindo DROP e TRUNCATE (superconjunto das restrições de |
Expiração da instância, expiração do host em um cluster ApsaraDB MyBase ou migração da instância. |
Quando LOCK_WRITE_GROWTH está ativo, as instruções SQL retornam:
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 e MySQL 5.6/5.7/8.0 com versão secundária do mecanismo anterior a 20190815
Todas as operações são bloqueadas, independentemente da causa do bloqueio.
Diagnostique a causa
Na página Basic Information, verifique a seção Usage Statistics. As duas causas possíveis são:
Causa 1: A capacidade de armazenamento foi esgotada.
Causa 2: Sua conta Alibaba Cloud possui pagamentos pendentes ou a instância RDS expirou.

Resolva a causa 1: capacidade de armazenamento esgotada
Expanda a capacidade de armazenamento ou libere espaço. A expansão é mais rápida e evita a exclusão de dados.
Opção 1: expandir a capacidade de armazenamento (recomendado)
Acesse a página Instances. Na barra de navegação superior, selecione a região onde a instância reside e clique em Change Specifications para expandir a capacidade de armazenamento.
Na página Basic Information, vá até a seção Configuration Information e clique em Change Specifications para expandir a capacidade de armazenamento.
Conclua o pagamento. Clique em
no canto superior direito da página Basic Information para monitorar o progresso na página Tasks.
O tempo necessário varia conforme o tipo de armazenamento:
|
Tipo de armazenamento |
Duração |
Observações |
|
Premium Local SSDs |
Variável |
Pode ocorrer migração de dados entre instâncias. É esperada uma conexão transitória de aproximadamente 30 segundos. Realize a expansão fora dos horários de pico e certifique-se de que sua aplicação se reconecte automaticamente. |
|
Discos em nuvem |
Cerca de 5 minutos |
MySQL e PostgreSQL: sem conexões transitórias. SQL Server: pode ocorrer uma conexão transitória de aproximadamente 30 segundos. Expanda fora dos horários de pico ou garanta que sua aplicação se reconecte automaticamente. Instâncias RDS específicas suportam expansão de capacidade de armazenamento sem perda de dados, o que não interrompe suas cargas de trabalho. |
Você também pode fazer login no console do ApsaraDB RDS e clique em Task Center no painel de navegação à esquerda para visualizar o progresso.
Opção 2: liberar armazenamento
Faça backup dos seus dados antes de excluir qualquer conteúdo. Se possível, prefira expandir o armazenamento para evitar perda de dados.
Acesse a página Instances. Selecione a região e clique em Change Specifications.
-
No painel de navegação à esquerda, clique em Monitoring and Alerts para visualizar o uso de armazenamento detalhado por tipo de dado.

Exclua dados com base na categoria de armazenamento que consome mais espaço.
Arquivos temporários (métrica temp_file_size)
O ApsaraDB RDS for MySQL gera tabelas temporárias para operações de classificação, agrupamento ou junção, além de arquivos de cache de log binário antes de confirmar transações grandes. Esses arquivos temporários podem esgotar o espaço em disco.
Para etapas de resolução, consulte O que devo fazer se uma instância ApsaraDB RDS for MySQL estiver no estado Locked porque sua capacidade de armazenamento foi esgotada por arquivos temporários?
Arquivos de log (métricas binlog_size e general_log_size)
|
Mecanismo de banco de dados |
Resolução |
|
MySQL |
Na página Monitoring and Alerts, visualize o uso de armazenamento e exclua arquivos de log. Consulte O que devo fazer se a capacidade de armazenamento de uma instância ApsaraDB RDS for MySQL for esgotada por arquivos de log binário? e FAQ sobre o recurso de log geral de consultas do ApsaraDB RDS for MySQL. |
|
PostgreSQL |
Não é possível excluir arquivos de log manualmente. Exclua slots de replicação inativos para permitir que o AliPG remova automaticamente os logs WAL. Consulte Use o recurso de gerenciamento de logs WAL para uma instância ApsaraDB RDS for PostgreSQL. |
|
SQL Server |
Não é possível excluir arquivos de log manualmente. Em vez disso, Reduza os logs de transação no console do ApsaraDB RDS. |
Arquivos de dados (métrica user_data_size)
MySQL:
Conecte-se à sua instância RDS usando o Data Management (DMS).
-
Execute a seguinte instrução para encontrar as maiores tabelas:
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; -
Remova tabelas desnecessárias:
DROP TABLE <Table name>; Aguarde aproximadamente 5 minutos para que o sistema desbloqueie a instância.
PostgreSQL:
-
Conecte-se à sua instância RDS usando o DMS. Consulte Use o DMS para fazer login em uma instância ApsaraDB RDS.
Se não conseguir conectar, primeiro expanda a capacidade de armazenamento, libere espaço em disco e depois reduza a capacidade conforme necessário. Consulte Alterar especificações da instância .
-
Execute a seguinte instrução para encontrar as maiores tabelas:
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; -
Remova tabelas desnecessárias:
DROP TABLE <Table name>; Aguarde aproximadamente 5 minutos para que o sistema desbloqueie a instância.
SQL Server:
Siga as etapas em Solucionar problemas de armazenamento insuficiente em uma instância ApsaraDB RDS for SQL Server.
Arquivos de sistema (métrica undolog_size)
Consultas de longa duração em tabelas InnoDB combinadas com grandes modificações simultâneas de dados podem gerar logs de desfazer excessivos e esgotar a capacidade de armazenamento.
Para etapas de resolução, consulte Solucionar armazenamento insuficiente causado pelo acúmulo de arquivos de sistema.
Resolva a causa 2: pagamentos pendentes ou expiração da instância
Instância por assinatura: Renove a instância, aguarde aproximadamente 5 minutos e verifique se a instância está no estado Running.
Instância de pagamento conforme o uso: Recarregue sua conta Alibaba Cloud, aguarde 5 minutos e verifique se a instância está no estado Running.
Evite bloqueios futuros
Configure os itens a seguir para evitar bloqueios inesperados:
Defina notificações de pagamento e expiração:
Faça login no console do ApsaraDB RDS.
Clique em
no canto superior direito para abrir o Message Center.No painel de navegação à esquerda, clique em Common Settings.
Na coluna Notification Type, selecione Product Overdue Payment, Suspension, and Imminent Release Notifications e clique em Modify.
Selecione os contatos de alerta e clique em Save.
Configure um alerta de uso de armazenamento: Defina regras de alerta para uso de armazenamento e acione um alerta quando o uso de armazenamento ultrapassar 90%.
Ative o SQL Explorer and Audit: Ative o recurso SQL Explorer and Audit para identificar e otimizar instruções SQL que causam picos de armazenamento.
Ative a expansão automática de armazenamento: Configure a expansão automática para que o sistema aumente a capacidade quando o armazenamento estiver baixo. Consulte os guias para MySQL, PostgreSQL e SQL Server.
Otimize instruções SQL: Evite o uso frequente de cláusulas ORDER BY e GROUP BY em consultas que processam grandes conjuntos de dados, pois elas geram arquivos temporários grandes.
FAQ
Por que o LOCK_WRITE_GROWTH continua ativo mesmo após eu ter excluído uma grande quantidade de dados?
A execução de DELETE marca registros como reutilizáveis, mas não reduz os arquivos de disco subjacentes nem recupera o espaço da tabela. Para liberar o espaço da tabela, use a instrução OPTIMIZE TABLE. Consulte Como uso a instrução OPTIMIZE TABLE para liberar o espaço de tabela de uma instância ApsaraDB RDS for MySQL?
Por que minha instância ainda está bloqueada mesmo com armazenamento suficiente ou após a renovação?
Uma tarefa, como uma alteração de configuração, ainda está em andamento. A instância será desbloqueada automaticamente quando a tarefa for concluída. Clique em
no canto superior direito da página Basic Information para verificar o progresso da tarefa na página Tasks.
Posso alterar as especificações da instância enquanto ela está no estado Locking?
Se a instância estiver bloqueada devido ao esgotamento do armazenamento, sim — você pode atualizar ou reduzir as especificações. Se estiver bloqueada por outros motivos, como pagamentos pendentes, resolva primeiro a questão financeira.
Minha instância usa um tipo de instância descontinuado. Como posso desbloqueá-la expandindo o armazenamento?
Altere o tipo da instância para um tipo disponível primeiro e depois expanda o armazenamento. Para tipos de instância disponíveis, consulte Tipos de instância primária do ApsaraDB RDS.
Por que o uso de armazenamento continua aumentando mesmo com a instância bloqueada?
As operações INSERT e UPDATE são bloqueadas, mas consultas de leitura ainda podem gerar arquivos de log ou dados temporários, o que aumenta o uso de armazenamento.