Sintomas
O status da instância na página Basic Information é Locking.
-
Quando uma instância está com o status Locking, não é possível executar instruções INSERT ou atualize.
Nota-
Para o RDS MySQL 5.6, 5.7 e 8.0 com versões secundárias do mecanismo lançadas a partir de 20190815, uma instância pode apresentar os três estados de bloqueio a seguir:
LOCK_WRITE_GROWTH: bloqueio que impede o crescimento do disco. Geralmente ocorre quando o disco da instância primária está cheio, impedindo operações que aumentariam o uso do disco. Instruções exclua geram uma grande quantidade de dados de binlog e aumentam o uso do disco. Para limpar dados, use instruções DROP ou TRUNCATE.
LOCK_READ: bloqueio que impede leituras. Normalmente ocorre quando o disco de uma instância somente leitura está cheio, impedindo consultas e gravações.
LOCK_WRITE: bloqueio que impede gravações. Pode ocorrer devido à expiração da instância, expiração do host (estado existente apenas no MyBase) ou migração da instância em andamento. Além das restrições do LOCK_WRITE_GROWTH, impede outras gravações de dados, como DROP e TRUNCATE.
Quando uma instância está bloqueada, a execução de algumas instruções SQL retorna o seguinte erro:
ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement. Para todas as versões secundárias do mecanismo do RDS MySQL 5.1 e 5.5, e versões secundárias do RDS MySQL 5.6, 5.7 e 8.0 lançadas antes de 20190815, a instância não pode execute nenhuma operação após ser bloqueada, independentemente da causa.
-
Causas comuns
O armazenamento da instância está cheio.
A conta possui pagamentos em atraso ou a instância expirou.
Resolver armazenamento cheio da instância
Na página Basic Information da instância, verifique se o armazenamento da instância está cheio.
Na seção Instance Resources, o campo Storage Capacity exibe a capacidade usada e a total. Clique em visualize detalhes para obter mais informações.
Soluções:
Liberar capacidade de armazenamento
acesse a página Instances. Na barra de navegação superior, selecione a região onde a instância do RDS reside. Em seguida, encontre a instância do RDS e clique em ID da instância.
No painel de navegação à esquerda, clique em Monitoring and Alerts para visualizar o espaço em disco usado por cada tipo de dado da instância. Na página Monitoring and Alerts, é possível visualizar gráficos de monitoramento como MySQL CPU/Memory Utilization, MySQL Storage Space Usage e Disk Usage. O gráfico MySQL Storage Space Usage exibe o uso de espaço por componente, incluindo
ins_size,binlog_size,relaylog_size,undolog_size,redolog_size,sys_data_sizeeuser_data_size. Arraste para selecione um intervalo de tempo e inicie um diagnóstico.-
Limpe o espaço em disco de acordo com o tipo de banco de dados.
AvisoAviso: Os dados são valiosos. Exclua dados com cautela. Se possível, expanda a capacidade de armazenamento para desbloquear a instância em vez de excluir dados. Se for obrigatório excluir dados, faça o backup do banco de dados primeiro para evitar perda de dados.
-
Arquivos temporários (correspondem a temp_file_size no monitoramento padrão)
Causa: Uma instância MySQL pode gerar arquivos de tabelas temporárias durante a classificação, agrupamento ou junção de tabelas em instruções de consulta, ou arquivos de cache de binlog antes que uma transação grande seja confirmada. Esses arquivos podem preencher o espaço em disco da instância.
Solução: 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?.
-
Arquivos de log (correspondem a binlog_size e general_log_size no monitoramento padrão)
Causa: Um sistema de gerenciamento de banco de dados gera logs de consulta, logs de consultas lentas e logs de erros para ajudar os administradores a monitorar o desempenho e a integridade do banco de dados.
Mecanismo
Resolução
MySQL
Com base nas informações de uso de espaço em disco em Monitoring and Alerts, exclua os arquivos de log correspondentes.
PostgreSQL
Os arquivos de log do RDS PostgreSQL não podem ser excluídos manualmente.
É possível excluir manualmente os Replication Slots inativos para permitir que o kernel do RDS PostgreSQL limpe automaticamente os logs WAL. Para obter mais informações, consulte Use the WAL log management feature.
SQL Server
Os arquivos de log do RDS SQL Server não podem ser excluídos manualmente, mas você pode usar o console para shrink transaction logs.
-
Arquivos de dados (correspondem a user_data_size no monitoramento padrão)
Mecanismo de banco de dados
Resolução
MySQL
execute a seguinte instrução SQL para visualizar os tamanhos das tabelas do banco de dados e identificar dados históricos ou desnecessários que possam ser excluídos.
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;No banco de dados relevante, use o comando
DROP TABLE <Table name>;para excluir dados.Após a limpeza, aguarde cerca de 5 minutos para que a instância do RDS seja desbloqueada.
PostgreSQL
Conecte-se à instância por meio do DMS. Para obter mais informações, consulte Use DMS to log on to an ApsaraDB RDS for MySQL instance.
NotaSe não for possível conectar-se à instância, primeiro Expand storage capacity e, em seguida, limpe o espaço em disco após a conclusão da expansão. Após a limpeza, decida se deve reduzir a capacidade de armazenamento com base nas suas necessidades. Para obter mais informações sobre como reduzir a capacidade de armazenamento, consulte Change configuration.
execute as seguintes instruções SQL para identificar as origens do uso de espaço em disco:
1. visualize o uso de espaço de cada banco de dados
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database ORDER BY pg_database_size(datname) DESC;2. visualize o uso de espaço das tabelas, incluindo índices, no banco de dados atual
SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) FROM pg_tables WHERE schemaname NOT IN ('information_schema', 'pg_catalog') ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC;3. visualize o tamanho de uma tabela especificada (método original)
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;Após identificar dados históricos ou desnecessários que podem ser excluídos, no banco de dados relevante, use o comando
DROP TABLE <Table name>;para excluir dados.ImportanteDesbloqueie a instância expandindo a capacidade de armazenamento antes de excluir dados. Após a limpeza, aguarde cerca de 5 minutos para que a instância do RDS seja desbloqueada.
SQL Server
Para obter mais informações, consulte Insufficient space issues for RDS for SQL Server.
-
Arquivos de sistema (correspondem a undolog_size no monitoramento padrão)
Causa: Se uma instrução de consulta em uma tabela InnoDB não terminar por um longo período e a tabela sofrer alterações significativas de dados durante a consulta, o sistema gera uma grande quantidade de informações de undo. As informações de undo consomem espaço de armazenamento até que o armazenamento se esgote.
Solução: Consulte Binary log file accumulation.
-
Expandir capacidade de armazenamento
acesse a página Instances. Na barra de navegação superior, selecione a região onde a instância do RDS reside. Em seguida, encontre a instância do RDS e clique em ID da instância.
Na página Basic Information, na seção Configuration Information, clique em Change Specifications para expand the instance storage capacity.
-
Após concluir o pagamento, acesse o Task Center para visualizar o progresso da alteração de configuração.
A duração da expansão varia de acordo com o tipo de armazenamento, conforme descrito abaixo. Você pode visitar a página home do console do RDS e visualizar o progresso da expansão em Tasks no painel de navegação à esquerda.
Tipo de armazenamento
Duração da expansão
Observações
Premium Local SSD
Sujeito às condições reais.
Se não houver recursos locais disponíveis, uma migração entre hosts será acionada. A duração da expansão é afetada por vários fatores, portanto, expanda a capacidade de armazenamento em horários de baixa demanda.
As alterações de configuração causam uma interrupção transitória de conexão de cerca de 15 segundos. Realize alterações de configuração em horários de baixa demanda e certifique-se de que sua aplicação possua um mecanismo de reconexão automática. Durante a interrupção, a maioria das operações relacionadas ao banco de dados, conta e rede não pode ser executada.
Cloud disk
Cerca de 5 minutos.
Nenhuma interrupção transitória de conexão ocorre enquanto instâncias de cloud disk do MySQL ou PostgreSQL são expandidas.
Uma instância de cloud disk do SQL Server pode ter uma interrupção transitória de conexão de cerca de 30 segundos durante expanding storage capacity. A maioria das operações relacionadas ao banco de dados, conta e rede não pode ser executada durante a interrupção. Realize alterações de configuração em horários de baixa demanda ou certifique-se de que sua aplicação possua um mecanismo de reconexão automática.Algumas instâncias atualmente suportam expansão de armazenamento sem perdas, o que não interrompe o acesso ao banco de dados.
Após a conclusão da expansão, o ID da instância e a string de conexão permanecem inalterados. No entanto, o endereço ip da instância pode mudar se a expansão do Premium Local SSD acionar uma migração entre hosts. Use o nome de domínio na string de conexão para se conectar à instância em vez de usar o endereço ip diretamente.
Resolver pagamentos em atraso ou expiração da instância
Assinatura: Se a instância expirou e não foi renovada, renew the instance, aguarde 5 minutos e verifique se o status da instância é Running.
Pagamento conforme o uso: Se a conta possui pagamentos em atraso, recarregue a conta, aguarde 5 minutos e verifique se o status da instância é Running.
Recomendações operacionais adicionais
Configure as seguintes opções para evitar o bloqueio da instância.
-
Configure notificações de alerta para expiração da instância e pagamentos em atraso.
Faça login no console de gerenciamento do RDS.
No canto superior direito da página, clique no ícone
para abrir a página Message Center.No painel de navegação à esquerda, clique em Basic Recipient Management.
Na página Basic Recipient Management, em Message Type, selecione Product Overdue Payment, Service Suspension, and Imminent Release Notifications e clique em Modify.
Na caixa de diálogo Modify Message Recipients, selecione os contatos a serem notificados e clique em Save para concluir as configurações.
Configure um storage capacity alert da instância. defina o alerta para ser acionado quando o uso de armazenamento ultrapassar 90%.
ative SQL Explorer and Audit. Quando o uso de armazenamento aumentar drasticamente, use Monitoring and Alerts para consultar instruções SQL históricas do período em que o uso de armazenamento aumentou e otimize as instruções SQL.
Configure a expansão automática de armazenamento. Quando os recursos forem insuficientes, o sistema expande automaticamente a capacidade de armazenamento. Para obter mais informações, consulte Configure automatic storage expansion for RDS MySQL, Configure automatic storage expansion for RDS PostgreSQL e Configure automatic storage expansion for RDS SQL Server.
Se os arquivos temporários forem grandes, otimize as instruções SQL e evite operações frequentes de ORDER BY e GROUP BY.
Por que o LOCK_WRITE_GROWTH continua ativo após eu excluir uma grande quantidade de dados da instância?
Ao usar uma instrução DELETE para excluir dados, o banco de dados marca apenas registros ou páginas de dados como reutilizáveis. Isso não reduz diretamente o tamanho dos arquivos de disco, portanto, o tablespace não é recuperado automaticamente. Para liberar o tablespace, você pode Use OPTIMIZE TABLE to reclaim MySQL tablespace.
Por que uma instância continua bloqueada mesmo com espaço de armazenamento suficiente ou após ser renovada?
Uma tarefa, como uma alteração de configuração, está em execução na instância. A instância é desbloqueada automaticamente após a conclusão da tarefa. No canto superior direito da página Basic Information da instância, clique em botão
para acessar a página Tasks e visualize o progresso da tarefa. Se nenhuma tarefa estiver em execução e o uso do disco tiver caído para menos de 100%, a instância ainda passa por três estágios antes de ser desbloqueada: o uso do disco é verificado em um ciclo fixo, e não em tempo real; o sistema emite uma tarefa de desbloqueio somente após detectar que o uso do disco caiu para menos de 100%; e a tarefa de desbloqueio é executada e conclui o desbloqueio. A instância geralmente é desbloqueada automaticamente em até 10 minutos após o uso do disco cair para menos de 100%.
Posso alterar as especificações da instância enquanto ela exibe o status "Locking"?
Você pode fazer upgrade ou downgrade das especificações apenas quando a instância estiver bloqueada devido ao disco cheio. Se a instância estiver bloqueada por causa de pagamentos em atraso, renove-a primeiro e, em seguida, altere as especificações.
Como desbloquear uma instância de um tipo de instância legado expandindo a capacidade de armazenamento?
Primeiro, altere as especificações da instância para um tipo de instância disponível atualmente e, em seguida, expanda a capacidade de armazenamento da instância. Para tipos de instância disponíveis atualmente, consulte Primary ApsaraDB RDS instance types.
Por que o uso de armazenamento pode aumentar enquanto uma instância está no estado "Locking"?
No estado "Locking", não é possível executar operações INSERT ou atualize. No entanto, as operações de consulta ainda podem gerar arquivos de log ou outros dados temporários, o que pode aumentar ainda mais o uso de armazenamento.