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

Esta página descreve problemas conhecidos e incompatibilidades que pode encontrar depois de fazer uma atualização de versão principal do Cloud SQL para MySQL 5.7 para Cloud SQL para MySQL 8.0.

Para mais informações sobre a atualização da versão principal, consulte o artigo Atualize a versão principal da base de dados no local. Para mais informações sobre os registos de erros, consulte os artigos e Veja os registos de erros.

Problemas de desempenho

As secções seguintes abordam problemas de desempenho conhecidos.

Problemas com a consulta SELECT DISTINCT

Se usar a consulta SELECT DISTINCT no MySQL 8.0.18 a 8.0.20, pode ter um desempenho reduzido. Os tempos de execução de consultas podem demorar três vezes mais em comparação com o MySQL 5.7.

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

Para resolver este problema, siga estas recomendações de resolução de problemas:

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

Problemas com consultas GROUP BY

Se usar consultas SELECT... GROUP BY no MySQL 8.0.36 ou anterior, pode ter um desempenho reduzido e um aumento dos tempos de execução das consultas.

Isto pode acontecer se a consulta usar o motor TempTable.

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

Para resolver este problema, siga estas recomendações de resolução de problemas:

  • Atualize para o MySQL 8.0.37, qualquer versão secundária posterior ou a versão mais recente.
  • Se usar o MySQL 8.0.36 ou anterior, atualize a flag da base de dados internal_tmp_mem_storage_engine para usar o motor de memória em vez do motor de tabelas temporárias:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas em threads de concorrência baixa

As instâncias criadas no MySQL 8.0.22 ou posterior que suportam aplicações cliente com threads de concorrência baixos podem ter problemas de desempenho e tempos de execução de consultas aumentados.

O MySQL 8.0.22 introduziu a flag innodb_log_writer_threads para melhorar o desempenho em sistemas de concorrência elevada. Esta flag está ativada por predefinição. Se tiver instâncias criadas no MySQL 8.0.22 ou posterior que suportem aplicações cliente com threads de concorrência baixos, recomendamos que desative a flag innodb_log_writer_threads.

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

Problemas com o JOINS

Se usar consultas JOIN com a vista eq_ref em instâncias que usam o MySQL 8.0.29 até ao MySQL 8.0.32, pode ter problemas de desempenho significativos.

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

Para resolver este 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 executar uma consulta com as cláusulas LIMIT e ORDER BY no MySQL 8.0.32 ou anterior, pode ter um problema de desempenho. Em alguns casos, pode ser usado um plano de consulta diferente no MySQL 8.0 em comparação com o MySQL 5.7 para a mesma consulta.

Para mais informações, consulte o artigo Alterações no MySQL 8.0.33.

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

Problemas de fuga de memória no MySQL 8.0

As secções seguintes abordam problemas conhecidos de fuga de memória no MySQL 8.0 ou posterior. Estes problemas também afetam provavelmente o desempenho da instância.

Fuga de memória causada por consultas de intervalo

Se usar o otimizador de intervalos em instâncias com o MySQL 8.0.16 até ao MySQL 8.0.28, o ficheiro de código e a função memory/sql/THD::main_mem_root podem consumir muita memória. Isto pode fazer com que a instância fique sem memória (OOM).

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

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

Fuga de memória associada a procedimentos armazenados

Se executar uma consulta num procedimento armazenado em instâncias com o MySQL 8.0.27 a 8.0.31, a consulta pode consumir uma quantidade muito elevada de memória no ficheiro de código e na função memory/sql/sp_head::execute_mem_root.

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

Para resolver este problema, atualize para o MySQL 8.0.32, qualquer versão secundária posterior ou o lançamento mais recente.

Perda de memória causada pelo acesso a uma vista através de SELECT

Se usar a consulta SELECT no MySQL 8.0.35 ou anterior e a sua aplicação usar várias chamadas de visualização, pode ocorrer uma fuga de memória percetível.

Além disso, se a vista DEFINER estiver definida como root@'%' ou um utilizador derivado da função cloudsqlsuperuser, pode ocorrer uma fuga de memória. Isto deve-se ao facto de a função cloudsqlsuperuser ter privilégios de revogação parciais.

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

Para resolver este problema, siga estas recomendações de resolução de problemas:

  • Atualize para o MySQL 8.0.36, qualquer versão secundária posterior ou a versão mais recente.
  • Se usar o MySQL 8.0.35 ou anterior, use um utilizador separado para a vista DEFINER, especificamente um utilizador que não tenha privilégios de revogação parcial. Se tiver de usar o utilizador root@'%' ou a função cloudsqlsuperuser, certifique-se de que os usa apenas para processos administrativos e não para consultas de aplicações. Se a fuga de memória persistir, tem de atualizar para o MySQL 8.0.36, qualquer versão secundária posterior ou a versão mais recente.

Problemas de replicação

A secção seguinte aborda problemas conhecidos relacionados com a replicação.

Problemas com a replicação paralela

Se usar a replicação paralela numa réplica com várias linhas de execução que tenha o componente slave_preserve_commit_order ativado e a instância for usada para cargas de trabalho de escrita elevadas, as operações da instância podem ser pausadas indefinidamente devido a um impasse e a um tempo de atraso de replicação acumulado.

Este problema é observado no MySQL 8.0.27 até ao MySQL 8.0.32.

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

Para resolver este problema, siga estas recomendações de resolução de 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 ajudar a validar a causa deste problema e, em seguida, agende uma atualização adequada. Embora a desativação da replicação paralela possa resolver temporariamente o problema, não é recomendada como solução a longo prazo.

Problemas de privilégios

As secções seguintes abordam problemas conhecidos relacionados com privilégios.

Alterações aos privilégios

O MySQL alterou os sistemas de segurança e gestão de contas no MySQL 8.0.

Após a atualização para o MySQL 8.0, os utilizadores criados no MySQL 5.7 podem não ter os mesmos privilégios e acesso que os utilizadores criados no MySQL 8.0. Como resultado, os utilizadores criados no MySQL 5.7 podem receber uma mensagem de erro de acesso negado nos seguintes cenários:

  • Os utilizadores atualizados a partir do MySQL 5.7 podem não ter privilégios CREATE ROLE e DROP ROLE, uma vez que esses privilégios não existiam no MySQL 5.7.
  • Os utilizadores atualizados a partir do MySQL 5.7 podem não conseguir executar o comando KILL, que agora precisa de privilégios CONNECTION_ADMIN para funcionar no MySQL 8.0.

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

Uma mensagem de erro de exemplo é semelhante à seguinte:

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

Não pode atribuir diretamente nenhum destes privilégios atualizados a um utilizador existente. Para resolver este problema, um administrador com os privilégios GRANT OPTION deve repor os privilégios do utilizador após a atualização para concluir a atualização da versão principal.

Para mais informações, consulte o artigo Atualize a versão principal da base de dados no local.

As alterações aos privilégios causam o erro Acesso negado

Os utilizadores criados no MySQL 5.7 que foram atualizados para o MySQL 8.0 podem não conseguir estabelecer ligação à base de dados devido a um problema de privilégios. Nestes casos, os utilizadores 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 da base de dados partial_revokes e ativou-a por predefinição, o que permite revogar parcialmente os privilégios do utilizador.

Se os utilizadores criados no MySQL 5.7 foram definidos com carateres universais, esses utilizadores podem não conseguir estabelecer ligação à base de dados. Os carateres universais já não são suportados no MySQL 8.0.16 ou posterior. Isto significa que o MySQL não consegue encontrar uma correspondência exata para a base de dados e o utilizador, o que pode fazer com que algumas atribuições de privilégios existentes sejam ignoradas na atualização.

Este problema afeta o MySQL 8.0.16 ou posterior.

Para mais informações, consulte os artigos Configure as flags da base de dados e Segurança e gestão de contas.

Para resolver este problema, um administrador tem de atribuir manualmente autorizações aos utilizadores no MySQL 8.0.

Alterações nos valores dos sinalizadores entre o MySQL 5.7 e o MySQL 8.0

Quando atualiza do MySQL 5.7 para o MySQL 8.0, alguns valores de flags da base de dados podem ser alterados devido a uma alteração nos valores predefinidos entre as versões. Este comportamento pode causar problemas de desempenho.

Para mais informações, consulte o artigo Novos valores predefinidos no MySQL 8.0.

Para resolver este problema, certifique-se de que todos os valores de flags da base de dados atribuídos manualmente definidos no MySQL 5.7 continuam a ser aplicados após a atualização para o MySQL 8.0 ou posterior. Recomendamos que deixe os valores predefinidos atribuídos aos sinalizadores do sistema.

O que se segue?