Quando uma instância ApsaraDB RDS for MySQL fica sem armazenamento devido a um arquivo undo grande, a instância é bloqueada automaticamente e todas as operações de gravação falham até a resolução do problema. Este tópico explica como diagnosticar a questão, desbloquear a instância e limpar o arquivo undo.
Diagnosticar o problema
Para confirmar que os arquivos undo estão consumindo o armazenamento, acesse a página Monitoramento e Alertas e visualize os detalhes de uso. Se o Instance Status mostrar Locking e um arquivo undo grande dominar o uso do armazenamento, siga as etapas abaixo.
Causa raiz
Os dados undo aumentam quando consultas longas são executadas em uma tabela InnoDB durante a gravação de grandes volumes de dados na mesma tabela. O MySQL gera esses dados para permitir a reversão de transações. Quando eles preenchem o armazenamento disponível, o RDS bloqueia a instância para evitar perda de dados e define o status como Locking.
Esse problema não afeta instâncias com MySQL 8.0, pois essa versão exclui automaticamente o arquivo undo quando ele deixa de ser necessário.
Etapa 1: Desbloquear a instância
Para retirar a instância do estado Locking, expanda a capacidade de armazenamento conforme descrito em Alterar especificações da instância. A instância será desbloqueada automaticamente após a alteração entrar em vigor.
Etapa 2: Exclua o arquivo undo
O método de limpeza do arquivo undo depende da versão do MySQL.
MySQL 5.7
Conecte-se à instância e execute a instrução a seguir para verificar o local de armazenamento dos dados undo. Para obter instruções de conexão, consulte Conectar-se a uma instância ApsaraDB RDS for MySQL.
SHOW VARIABLES LIKE 'innodb_undo_tablespaces';
Se o valor for 2: a instância usa tablespaces undo independentes e o arquivo undo pode ser recuperado automaticamente. Quando o arquivo undo excede o tamanho definido por innodb_max_undo_log_size e nenhuma transação ativa referencia os dados, o MySQL trunca o arquivo para liberar armazenamento. Para ajustar esse limiar, consulte Modifique parâmetros da instância.
Se o valor for 0: os dados undo residem no tablespace do sistema ibdata1 e não podem ser excluídos. Para resolver isso, escolha uma das opções a seguir:
Crie uma nova instância RDS e migre os dados da instância original.
Atualize a versão principal do mecanismo para o MySQL 8.0. Consulte Atualizar a versão principal do mecanismo.
A atualização da versão principal do mecanismo pode causar problemas de compatibilidade. Revise os limites e as diferenças entre versões antes de prosseguir. Consulte Atualizar a versão principal do mecanismo.
Tanto a migração quanto a atualização envolvem um failover de instância. Execute essas operações fora dos horários de pico e garanta que a aplicação esteja configurada para reconexão automática. Consulte Impactos de um failover de instância.
O parâmetro innodb_undo_tablespaces só pode ser definido durante a criação da instância e não admite alterações posteriores. Se o parâmetro não foi especificado na criação da instância MySQL 5.7, o valor padrão será 0. Nesse caso, atualizar a versão secundária do mecanismo não habilitará tablespaces undo independentes.
MySQL 5.5 ou MySQL 5.6
Essas versões não permitem a exclusão do arquivo undo. Atualize a versão principal do mecanismo para o MySQL 5.7 ou MySQL 8.0. Consulte Atualizar a versão principal do mecanismo.
Ao atualizar para o MySQL 5.7, defina o parâmetro Edition como High-availability Edition. Essa edição define innodb_undo_tablespaces como 2 por padrão, permitindo armazenar e excluir dados undo em tablespaces undo independentes.
A atualização da versão principal do mecanismo pode causar problemas de compatibilidade. Revise os limites e as diferenças entre versões antes de prosseguir. Consulte Atualizar a versão principal do mecanismo.
A atualização envolve um failover de instância. Execute-a fora dos horários de pico e garanta que a aplicação esteja configurada para reconexão automática. Consulte Impactos de um failover de instância.
Próximos passos
Para reduzir o risco de recorrência desse problema:
Otimize instruções SQL para evitar consultas lentas.
Agende a criação e exclusão de índices, modificações de esquema, manutenção e exclusão de tabelas fora dos horários de pico.
Monitore e encerre sessões e transações longas. Consulte Visualize informações de monitoramento.
Referências
Verifique e limpe outros tipos de arquivo para liberar armazenamento adicional:
Ative recursos do serviço de autonomia para evitar que o crescimento do arquivo undo bloqueie a instância: