Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(for MySQL)/ Perguntas frequentes/ Desempenho do banco de dados/ Como lidar com um grande número de tabelas temporárias sendo geradas para transações longas e alto uso de memória?
Atualizado em 2024-09-29 GMT+08:00

Como lidar com um grande número de tabelas temporárias sendo geradas para transações longas e alto uso de memória?

Cenário

O uso de memória de uma instância do GaussDB(for MySQL) continuou aumentando das 11:30 às 12:27 e atingiu o limite de memória.

Figura 1 Uso da memória

Possíveis causas

  1. Verifique o arquivo processlist.log. Neste exemplo, mostrado abaixo, havia duas instruções SQL lentas nesse período.
    Figura 2 Instruções SQL lentas
  2. Analise logs de consulta lentos gerados nesse período de tempo. Havia cerca de 90 GB de dados e cerca de 1 bilhão de linhas de dados nos logs, e havia duas instruções SQL que levavam de 40 a 50 minutos para serem executadas. O tempo de execução basicamente se sobrepôs quando o uso de memória subiu nos resultados de monitoramento, então sabemos que o alto uso de memória foi causado por tabelas temporárias.

Solução

  1. Atualize as especificações da instância para manter o uso da memória dentro de um intervalo adequado, evitando que um aumento repentino no tráfego cause uma falha em OOM. Para obter detalhes, consulte Alteração de vCPUs e memória de uma instância de BD.
  2. Otimize instruções SQL lentas conforme necessário.