Problemas conhecidos nas versões secundárias do MySQL 8.0

Nesta página, descrevemos problemas conhecidos e incompatibilidades que podem ocorrer após um upgrade de versão do Cloud SQL para MySQL 5.7 para o Cloud SQL para MySQL 8.0.

Para mais informações sobre o upgrade da versão principal, consulte Fazer upgrade da versão principal do banco de dados no local. Para mais informações sobre registros de erros, consulte e Visualizar registros de erros.

Problemas de desempenho

As seções a seguir abordam problemas de desempenho conhecidos.

Problemas com a consulta SELECT DISTINCT

Se você estiver usando a consulta SELECT DISTINCT no MySQL 8.0.18 até o MySQL 8.0.20, poderá notar uma redução no desempenho. Os tempos de execução de consultas podem levar três vezes mais tempo em comparação com o MySQL 5.7.

Para mais informações, consulte o bug nº 99593 do MySQL.

Para resolver o problema, siga estas recomendações para solucionar problemas:

  • Atualize para o MySQL 8.0.21, qualquer versão secundária posterior ou a versão mais recente.
  • Se você estiver usando o MySQL 8.0.18 até o MySQL 8.0.20, atualize o valor da flag de banco de dados internal_tmp_mem_storage_engine para memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas com consultas de GROUP BY

Se você usar consultas SELECT... GROUP BY no MySQL 8.0.36 ou em versões anteriores, poderá notar uma redução no desempenho e um aumento nos tempos de execução das consultas.

Isso pode acontecer se a consulta usar o mecanismo TempTable.

Para mais informações, consulte o bug nº 107700 do MySQL.

Para resolver o problema, siga estas recomendações para solucionar problemas:

  • Atualize para o MySQL 8.0.37, qualquer versão secundária posterior ou a versão mais recente.
  • Se você estiver usando o MySQL 8.0.36 ou uma versão anterior, atualize a flag de banco de dados internal_tmp_mem_storage_engine para usar o mecanismo de memória em vez do mecanismo de tabela temporária:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas em linhas de execução de baixa simultaneidade

As instâncias criadas no MySQL 8.0.22 ou em versões mais recentes que oferecem suporte a aplicativos cliente com threads de baixa simultaneidade podem apresentar problemas de desempenho e aumento nos tempos de execução de consultas.

O MySQL 8.0.22 introduziu a flag innodb_log_writer_threads para melhorar o desempenho em sistemas de alta simultaneidade. Essa flag é ativada por padrão. Se você tiver instâncias criadas no MySQL 8.0.22 ou versões mais recentes que oferecem suporte a aplicativos cliente com threads de baixa simultaneidade, recomendamos desativar a flag innodb_log_writer_threads.

Para mais informações, consulte o bug nº 93734 do MySQL.

Problemas com JOINS

Se você estiver usando consultas JOIN com a visualização eq_ref em instâncias que usam o MySQL 8.0.29 até o MySQL 8.0.32, talvez ocorra problemas significativos de desempenho.

Para mais informações, consulte o bug nº 109361 do MySQL.

Para resolver esse problema, atualize para o MySQL 8.0.33, qualquer versão secundária posterior ou a versão mais recente.

Problemas com a cláusula LIMIT e ORDER BY

Se você executar uma consulta com as cláusulas LIMIT e ORDER BY no MySQL 8.0.32 ou anterior, poderá ocorrer um problema de desempenho. Em alguns casos, um plano de consulta diferente pode ser usado no MySQL 8.0 em comparação com o MySQL 5.7 para a mesma consulta.

Para mais informações, consulte Mudanças no MySQL 8.0.33.

Para resolver esse problema, atualize para o MySQL 8.0.33, qualquer versão secundária posterior ou a versão mais recente.

Problemas de vazamento de memória no MySQL 8.0

As seções a seguir abordam problemas conhecidos de vazamento de memória no MySQL 8.0 ou versões mais recentes. Esses problemas também podem afetar o desempenho da instância.

Vazamento de memória causado por consultas de intervalo

Se você estiver usando o otimizador de intervalo em instâncias com MySQL 8.0.16 a 8.0.28, o arquivo de código e a função memory/sql/THD::main_mem_root poderão causar alto consumo de memória. Isso pode fazer com que a instância fique sem memória (OOM).

Para mais informações, consulte o bug nº 105331 do MySQL.

Para resolver esse problema, atualize para o MySQL 8.0.29, qualquer versão secundária posterior ou a versão mais recente.

Vazamento de memória associado a procedimentos armazenados

Se você executar uma consulta em um procedimento armazenado em instâncias com MySQL 8.0.27 a 8.0.31, a consulta poderá consumir uma quantidade muito alta de memória no arquivo de código e na função memory/sql/sp_head::execute_mem_root.

Para mais informações, consulte Bug nº 107327 do MySQL.

Para resolver esse problema, atualize para o MySQL 8.0.32, qualquer versão secundária posterior ou a versão mais recente.

Vazamento de memória causado pelo acesso a uma visualização usando SELECT

Se você usar a consulta SELECT no MySQL 8.0.35 ou em versões anteriores e seu aplicativo usar várias chamadas de visualização, poderá ocorrer um vazamento de memória perceptível.

Além disso, se a visualização DEFINER estiver definida como root@'%' ou um usuário derivado da função cloudsqlsuperuser, poderá ocorrer um vazamento de memória. Isso ocorre porque o papel cloudsqlsuperuser tem privilégios de revogação parcial.

Para mais informações, consulte o bug nº 103133 do MySQL.

Para resolver o problema, siga estas recomendações para solucionar problemas:

  • Atualize para o MySQL 8.0.36, qualquer versão secundária posterior ou a versão mais recente.
  • Se você estiver usando o MySQL 8.0.35 ou uma versão anterior, use um usuário separado para a visualização DEFINER, especificamente um usuário que não tenha privilégios de revogação parcial. Se você precisar usar o usuário root@'%' ou a função cloudsqlsuperuser, use apenas para processos administrativos, não para consultas de aplicativos. Se o vazamento de memória persistir, faça upgrade para o MySQL 8.0.36, qualquer versão secundária posterior ou a versão mais recente.

Problemas de replicação

A seção a seguir aborda problemas conhecidos relacionados à replicação.

Problemas com a replicação paralela

Se você estiver usando a replicação paralela em uma réplica multithread que tenha o componente slave_preserve_commit_order ativado e a instância for usada para cargas de trabalho de gravação intensa, as operações de instância poderão ser pausadas indefinidamente devido a um deadlock e ao acúmulo de tempo de atraso de replicação.

Esse problema ocorre no MySQL 8.0.27 até o MySQL 8.0.32.

Para mais informações, consulte Bug nº 95863 do MySQL e Bug nº 103636 do MySQL.

Para resolver o problema, siga estas recomendações para solucionar problemas:

  • Atualize para o MySQL 8.0.33, qualquer versão secundária posterior ou a versão mais recente.
  • Desative a replicação paralela para verificar a causa do problema e agende um upgrade adequado. Embora a desativação da replicação paralela possa resolver o problema temporariamente, ela não é recomendada como uma solução de longo prazo.

Problemas de privilégio

As seções a seguir discutem problemas conhecidos relacionados a privilégios.

Mudanças nos privilégios

O MySQL mudou os sistemas de segurança e gerenciamento de contas no MySQL 8.0.

Depois de fazer upgrade para o MySQL 8.0, os usuários criados no MySQL 5.7 podem não ter os mesmos privilégios e acesso que os usuários criados no MySQL 8.0. Como resultado, os usuários criados no MySQL 5.7 podem receber uma mensagem de erro de acesso negado nos seguintes cenários:

  • Os usuários atualizados do MySQL 5.7 podem não ter os privilégios CREATE ROLE e DROP ROLE porque eles não existiam no MySQL 5.7.
  • Os usuários atualizados do MySQL 5.7 talvez não consigam executar o comando KILL, que agora precisa de privilégios CONNECTION_ADMIN para funcionar no MySQL 8.0.

Para mais informações, confira todos os privilégios disponíveis no MySQL 8.0.

Uma mensagem de erro de exemplo é semelhante a esta:

    ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
  

Não é possível atribuir diretamente nenhum desses privilégios atualizados a um usuário atual. Para resolver esse problema, um administrador com os privilégios GRANT OPTION precisa redefinir os privilégios do usuário após o upgrade para concluir o upgrade da versão principal.

Para mais informações, consulte Fazer upgrade da versão principal do banco de dados no local.

Mudanças nos privilégios causam o erro "Acesso negado"

Os usuários criados no MySQL 5.7 que fizeram upgrade para o MySQL 8.0 podem não conseguir se conectar ao banco de dados devido a um problema de privilégios. Nesses casos, os usuários podem receber a seguinte mensagem de erro:

    Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
  

O MySQL 8.0.16 introduziu a flag de banco de dados partial_revokes e a ativou por padrão, permitindo revogar parcialmente os privilégios do usuário.

Se os usuários criados no MySQL 5.7 foram definidos com caracteres curinga, eles talvez não consigam se conectar ao banco de dados. Caracteres curinga não são mais compatíveis com o MySQL 8.0.16 ou versões mais recentes. Isso significa que o MySQL não consegue localizar uma correspondência exata para o banco de dados e o usuário, o que pode fazer com que algumas atribuições de privilégios atuais sejam perdidas no upgrade.

Esse problema afeta o MySQL 8.0.16 ou versões mais recentes.

Para mais informações, consulte Configurar flags de banco de dados e Segurança e gerenciamento de contas.

Para resolver esse problema, um administrador precisa atribuir permissões manualmente aos usuários no MySQL 8.0.

Mudanças nos valores de flags entre o MySQL 5.7 e o MySQL 8.0

Ao fazer upgrade do MySQL 5.7 para o MySQL 8.0, alguns valores de flags de banco de dados podem ser alterados devido a uma mudança nos valores padrão entre as versões. Esse comportamento pode causar problemas de desempenho.

Para mais informações, consulte Novos valores padrão no MySQL 8.0.

Para resolver esse problema, verifique se os valores de flags de banco de dados atribuídos manualmente definidos no MySQL 5.7 ainda são aplicados após o upgrade para o MySQL 8.0 ou mais recente. Recomendamos deixar os valores padrão atribuídos às flags do sistema.

A seguir