Todos os produtos
Search
Central de documentação

ApsaraDB RDS:FAQ about the general query log feature of ApsaraDB RDS for MySQL

Última atualização: Jun 26, 2026

O log de consultas gerais registra cada instrução SQL executada na sua instância do ApsaraDB RDS for MySQL — selecione, INSERT, atualize e exclua — e pode crescer rapidamente. Se permanecer ativado sem limpeza periódica, ele esgota o armazenamento, degrada o desempenho e aumenta o tempo de recuperação.

Por que o RDS armazena os logs de consultas gerais em uma tabela?

Por padrão, o ApsaraDB RDS for MySQL armazena os logs de consultas gerais em uma tabela de banco de dados em vez de um arquivo, por dois motivos:

  • Os usuários não têm acesso direto aos arquivos de uma instância RDS; portanto, você não pode consultar nem baixar logs baseados em arquivos.

  • O parâmetro log_output controla o formato de saída tanto para os logs de consultas gerais quanto para os logs de consultas lentas. Como o RDS rotaciona os logs de consultas lentas e exige que eles sejam armazenados em tabelas, os logs de consultas gerais também precisam ser armazenados em tabelas.

Por que o log de consultas gerais esgota o armazenamento?

Cada instrução SQL executada na instância gera uma entrada de log. Quando o log de consultas gerais permanece ativado por um longo período ou a instância processa um alto volume de consultas, a tabela mysql.general_log cresce continuamente. Se você não limpar a tabela periodicamente, ela ocupará todo o armazenamento da instância.

É necessário que você confirme se o log de consultas gerais está causando o problema de armazenamento:

  1. Verifique o uso de armazenamento na página de monitoramento da instância. Se o sys_data_size estiver anormalmente alto, os dados da tabela estão consumindo o armazenamento. Para mais detalhes, consulte Visualize as informações de monitoramento.

  2. Visualize os parâmetros da instância. Se o general_log estiver definido como ON, o recurso está ativo.

Por que o log de consultas gerais causa problemas de desempenho?

Quando o log de consultas gerais está ativado, cada thread que executa uma instrução SQL precisa gravar uma linha na tabela mysql.general_log. Essa operação de gravação exige bloqueios de metadados (MDLs) e bloqueios de tabela; portanto, os threads gravam na tabela de forma sequencial, e não paralela.

Em cenários com alto volume de conexões, vários threads competem por esses bloqueios simultaneamente e deixam as conexões no estado Waiting for table level lock. À medida que o número de conexões cresce, a utilização da CPU também aumenta.

Para confirmar: execute SHOW PROCESSLIST ou consulte a tabela innodb_trx e confirme se muitas conexões exibem Waiting for table level lock, indicando que o log de consultas gerais está contribuindo para a contenção de bloqueios.

Por que o log de consultas gerais aumenta o tempo de recuperação?

Se uma instância RDS for desligada de forma inesperada, o sistema define o marcador de falha do log de consultas gerais como true. Na reinicialização, a instância inicia um processo de recuperação automática. Se o tamanho das tabelas na instância RDS for grande, a restauração levará muito tempo, durante o qual a instância permanecerá indisponível. Isso aumenta diretamente o objetivo de tempo de recuperação (RTO).

Solução

  1. Para interromper a gravação de novas entradas de log, defina general_log como OFF. Para fazer isso, consulte Modifique os parâmetros da instância.

  2. Conecte-se à instância usando uma conta privilegiada. Para obter instruções, consulte Conecte-se a uma instância do ApsaraDB RDS for MySQL.

  3. Limpe a tabela de log:

    A instrução TRUNCATE não é compatível com instâncias que executam o MySQL 5.6. Para essas instâncias, contate o suporte técnico para limpar o log. Para a lista completa de suporte a recursos por versão, consulte Recursos .
    TRUNCATE TABLE mysql.general_log;

Após limpar o log, acesse a página de monitoramento da instância e confirme que o uso de armazenamento diminuiu.

Alternativas para análise de SQL

Mantenha o log de consultas gerais desativado durante as operações normais e ative-o apenas para sessões curtas de depuração e, em seguida, desative-o e limpe a tabela imediatamente após o uso.

Para análises contínuas de SQL, use uma das seguintes abordagens:

  • SQL Explorer and Audit (recomendado): ative este recurso para gravar e analisar instruções SQL automaticamente. Os dados são armazenados no Database Autonomy Service (DAS) e não consomem o armazenamento da sua instância RDS; portanto, não impactam o desempenho da instância. Para mais detalhes, consulte Use o recurso SQL Explorer and Audit.

  • Log de consultas gerais temporário: Se precisar depurar um problema específico, ative o log de consultas gerais e consulte a tabela de log para inspecionar a atividade SQL:

    SELECT * FROM mysql.general_log;

    Desative o recurso e limpe a tabela assim que a depuração for concluída.

O que fazer se o armazenamento já estiver esgotado

Se a instância ficar sem armazenamento antes de você limpar o log, expanda a capacidade de armazenamento: