O log de consultas gerais registra todas as instruções SQL executadas na instância: consultas, inserções, atualizações e exclusões. Em instâncias com alta carga de trabalho, esse log pode crescer rapidamente, causar esgotamento do armazenamento, contenção de bloqueios e aumentar o tempo de recuperação após falhas.
Por padrão, o ApsaraDB RDS for MySQL armazena o log de consultas gerais no formatoTABLE. Logs armazenados no formatoFILEnão podem ser consultados nem baixados, pois o acesso direto ao sistema de arquivos da instância não é permitido. O parâmetrolog_outputcontrola o formato de saída do log de consultas gerais e do log de consultas lentas. Como o RDS utiliza um mecanismo de rotação que exige o formatoTABLEpara logs de consultas lentas, o log de consultas gerais também deve usar o formatoTABLE.
Visão geral dos parâmetros de log
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Ativa ou desativa o log de consultas gerais |
|
|
|
Formato de saída. |
|
|
— |
Métrica de monitoramento que indica o tamanho atual da tabela do log de consultas gerais |
Por que o log de consultas gerais consome todo o espaço de armazenamento?
Em instâncias com alto tráfego ou sem limpeza recente, o log de consultas gerais cresce indefinidamente. Para verificar se essa é a causa, visualize o uso de armazenamento da instância e procure um valor elevado em general_log_size.
Para recuperar espaço de armazenamento, siga as etapas em Limpar o log de consultas gerais.
Por que vejo muitas conexões no estado "Waiting for table level lock"?
Execute SHOW PROCESSLIST ou consulte a tabela innodb_trx para verificar. Se muitas conexões exibirem Waiting for table level lock combinadas com alta contagem de conexões e utilização elevada de CPU, provavelmente o log de consultas gerais é a causa.
Como o log é armazenado como tabela, as threads gravam nele de forma serial. Cada gravação adquire um bloqueio de metadados (MDL) e um bloqueio no nível da tabela. Sob alto volume de gravações, esses bloqueios formam fila e impedem outras conexões.
Desative o log de consultas gerais para interromper novas contenções de bloqueio e limpe a tabela de log. Consulte Limpar o log de consultas gerais.
Por que minha instância demora muito para se recuperar após um desligamento inesperado?
Quando uma instância é desligada inesperadamente, uma marca de falha é definida no log de consultas gerais. Na próxima reinicialização, o MySQL inicia automaticamente um processo de recuperação da tabela de log. Quanto maior a tabela, mais longa será a recuperação. Durante esse período, a instância fica indisponível, o que aumenta o Objetivo de Tempo de Recuperação (RTO).
Manter o log de consultas gerais desativado durante operações normais e limpar a tabela regularmente mantém a tabela pequena e acelera a recuperação.
Limpar o log de consultas gerais
Desative o log de consultas gerais: defina o parâmetro
general_logcomoOFF. Isso impede a gravação de novas entradas no log. Para obter instruções, consulte Definir parâmetros da instância.-
Conecte-se à instância com uma conta privilegiada e execute:
TRUNCATE TABLE mysql.general_log;Após a conclusão do comando, verifique o resultado na página de monitoramento da instância. O valor de
general_log_sizedeve cair para próximo de zero.
O comando TRUNCATE TABLE mysql.general_log não é suportado em instâncias do ApsaraDB RDS for MySQL 5.6. Entre em contato com o suporte para limpar o log no MySQL 5.6.
Melhores práticas
Mantenha o log de consultas gerais desativado durante operações normais. Ative-o apenas temporariamente para depuração ou solução de problemas. Em seguida, limpe-o e desative-o imediatamente.
Para análise e auditoria contínua de SQL, utilize uma das alternativas abaixo:
**(Recomendado) SQL Explorer and Audit**: Registra e analisa automaticamente as instruções SQL executadas. Os dados de auditoria ficam armazenados no Database Autonomy Service (DAS), sem consumir espaço de armazenamento da instância RDS ou afetar seu desempenho.
-
Log de consultas gerais temporário: Ative o log de consultas gerais provisoriamente, consulte a tabela de log e, ao terminar, desative-o e limpe-o:
SELECT * FROM mysql.general_log;
Próximas etapas
Ativar expansão automática de armazenamento — o sistema expande o armazenamento automaticamente quando o uso atinge o limiar configurado