Problemas conocidos en las versiones secundarias de MySQL 8.0

En esta página, se describen los problemas conocidos y las incompatibilidades que puedes encontrar después de realizar una actualización de versión principal de Cloud SQL para MySQL 5.7 a Cloud SQL para MySQL 8.0.

Para obtener más información sobre la actualización de la versión principal, consulta Actualiza la versión principal de la base de datos de manera local. Para obtener más información sobre los registros de errores, consulta Visualiza los registros de errores.

Problemas de rendimiento

En las siguientes secciones, se abordan los problemas de rendimiento conocidos.

Problemas con la búsqueda de SELECT DISTINCT

Si usas la consulta SELECT DISTINCT en MySQL 8.0.18 a MySQL 8.0.20, es posible que experimentes una reducción en el rendimiento. Los tiempos de ejecución de las consultas pueden tardar tres veces más en comparación con MySQL 5.7.

Para obtener más información, consulta Error #99593 de MySQL.

Para resolver este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.21, a cualquier versión secundaria posterior o a la versión más reciente.
  • Si usas MySQL 8.0.18 a MySQL 8.0.20, actualiza el valor de la marca de base de datos internal_tmp_mem_storage_engine a memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas con las búsquedas de GROUP BY

Si usas consultas SELECT... GROUP BY en MySQL 8.0.36 o versiones anteriores, es posible que experimentes una reducción del rendimiento y un aumento en los tiempos de ejecución de las consultas.

Esto puede ocurrir si la búsqueda utiliza el motor de TempTable.

Para obtener más información, consulta Error #107700 de MySQL.

Para resolver este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.37, a cualquier versión secundaria posterior o a la versión más reciente.
  • Si usas MySQL 8.0.36 o una versión anterior, actualiza la marca de la base de datos internal_tmp_mem_storage_engine para usar el motor de memoria en lugar del motor de tablas temporales:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas en subprocesos con baja simultaneidad

Las instancias creadas en MySQL 8.0.22 o versiones posteriores que admiten aplicaciones cliente con subprocesos de baja simultaneidad pueden experimentar problemas de rendimiento y tiempos de ejecución de consultas más largos.

MySQL 8.0.22 introdujo la marca innodb_log_writer_threads para mejorar el rendimiento en sistemas de alta simultaneidad. Esta marca está habilitada de forma predeterminada. Si tienes instancias creadas en MySQL 8.0.22 o versiones posteriores que admiten aplicaciones cliente con subprocesos de baja simultaneidad, te recomendamos que inhabilites la marca innodb_log_writer_threads.

Para obtener más información, consulta Error #93734 de MySQL.

Problemas con JOINS

Si usas consultas JOIN con la vista eq_ref en instancias que usan MySQL 8.0.29 a MySQL 8.0.32, es posible que experimentes problemas de rendimiento significativos.

Para obtener más información, consulta el error #109361 de MySQL.

Para resolver este problema, actualiza a MySQL 8.0.33, a cualquier versión secundaria posterior o a la versión más reciente.

Problemas con las cláusulas LIMIT y ORDER BY

Si ejecutas una consulta con las cláusulas LIMIT y ORDER BY en MySQL 8.0.32 o versiones anteriores, es posible que experimentes un problema de rendimiento. En algunos casos, se puede usar un plan de consultas diferente en MySQL 8.0 en comparación con MySQL 5.7 para la misma consulta.

Para obtener más información, consulta Cambios en MySQL 8.0.33.

Para resolver este problema, actualiza a MySQL 8.0.33, a cualquier versión secundaria posterior o a la versión más reciente.

Problemas de fuga de memoria en MySQL 8.0

En las siguientes secciones, se abordan los problemas conocidos de pérdida de memoria en MySQL 8.0 o versiones posteriores. Es probable que estos problemas también afecten el rendimiento de la instancia.

Fuga de memoria causada por consultas de rango

Si usas el optimizador de rangos en instancias con MySQL 8.0.16 a MySQL 8.0.28, es posible que se produzca un alto consumo de memoria por parte del archivo de código y la función memory/sql/THD::main_mem_root. Esto puede hacer que la instancia se quede sin memoria (OOM).

Para obtener más información, consulta Error #105331 de MySQL.

Para resolver este problema, actualiza a MySQL 8.0.29, a cualquier versión secundaria posterior o a la versión más reciente.

Fuga de memoria asociada con procedimientos almacenados

Si ejecutas una consulta en un procedimiento almacenado en instancias con MySQL 8.0.27 a 8.0.31, es posible que la consulta consuma una cantidad muy alta de memoria en el archivo y la función de código memory/sql/sp_head::execute_mem_root.

Para obtener más información, consulta Error #107327 de MySQL.

Para resolver este problema, actualiza a MySQL 8.0.32, a cualquier versión secundaria posterior o a la versión más reciente.

Fuga de memoria causada por el acceso a una vista con SELECT

Si usas la consulta SELECT en MySQL 8.0.35 o en una versión anterior, y tu aplicación usa numerosas llamadas de vista, es posible que experimentes una pérdida de memoria notable.

Además, si la vista DEFINER está configurada como root@'%' o un usuario derivado del rol cloudsqlsuperuser, es posible que se produzca una pérdida de memoria. Esto se debe a que el rol cloudsqlsuperuser tiene privilegios de revocación parcial.

Para obtener más información, consulta Error #103133 de MySQL.

Para resolver este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.36, a cualquier versión secundaria posterior o a la versión más reciente.
  • Si usas MySQL 8.0.35 o una versión anterior, usa un usuario independiente para la vista DEFINER, específicamente un usuario que no tenga privilegios de revocación parcial. Si debes usar el usuario root@'%' o el rol cloudsqlsuperuser, asegúrate de usarlos solo para procesos administrativos y no para consultas de aplicaciones. Si la pérdida de memoria persiste, debes actualizar a MySQL 8.0.36, a cualquier versión secundaria posterior o a la versión más reciente.

Problemas de replicación

En la siguiente sección, se describen los problemas conocidos relacionados con la replicación.

Problemas con la replicación paralela

Si usas la replicación paralela en una réplica de varios subprocesos que tiene habilitado el componente slave_preserve_commit_order y la instancia se usa para cargas de trabajo con muchas escrituras, es posible que las operaciones de la instancia se pausen de forma indefinida debido a un interbloqueo y a la acumulación de tiempo de retraso de la replicación.

Este problema se observa en MySQL 8.0.27 a MySQL 8.0.32.

Para obtener más información, consulta Error #95863 de MySQL y Error #103636 de MySQL.

Para resolver este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.33, a cualquier versión secundaria posterior o a la versión más reciente.
  • Inhabilita la replicación paralela para verificar la causa de este problema y, luego, programa una actualización adecuada. Si bien inhabilitar la replicación paralela puede resolver el problema de forma temporal, no se recomienda como solución a largo plazo.

Problemas de privilegios

En las siguientes secciones, se analizan los problemas conocidos relacionados con los privilegios.

Cambios en los privilegios

MySQL cambió los sistemas de administración de cuentas y seguridad en MySQL 8.0.

Después de actualizar a MySQL 8.0, es posible que los usuarios creados en MySQL 5.7 no tengan los mismos privilegios y acceso que los usuarios creados en MySQL 8.0. Como resultado, los usuarios creados en MySQL 5.7 pueden recibir un mensaje de error de acceso denegado en las siguientes situaciones:

  • Es posible que los usuarios actualizados desde MySQL 5.7 no tengan los privilegios CREATE ROLE y DROP ROLE, ya que estos privilegios no existían en MySQL 5.7.
  • Es posible que los usuarios que se actualizaron desde MySQL 5.7 no puedan ejecutar el comando KILL, que ahora necesita privilegios de CONNECTION_ADMIN para funcionar en MySQL 8.0.

Para obtener más información, puedes consultar todos los privilegios disponibles en MySQL 8.0.

Un ejemplo de mensaje de error es similar al siguiente:

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

No puedes asignar directamente ninguno de estos privilegios actualizados a un usuario existente. Para resolver este problema, un administrador con privilegios de GRANT OPTION debe restablecer los privilegios de usuario después de la actualización para completar la actualización de la versión principal.

Para obtener más información, consulta Actualiza la versión principal de la base de datos de manera local.

Los cambios en los privilegios provocan el error de acceso denegado

Es posible que los usuarios creados en MySQL 5.7 que se actualizaron a MySQL 8.0 no puedan conectarse a la base de datos debido a un problema de privilegios. En esos casos, es posible que los usuarios reciban el siguiente mensaje de error:

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

MySQL 8.0.16 introdujo la marca de base de datos partial_revokes y la habilitó de forma predeterminada, lo que permite revocar parcialmente los privilegios del usuario.

Si los usuarios creados en MySQL 5.7 se definieron con caracteres comodín, es posible que esos usuarios no puedan conectarse a la base de datos. Los caracteres comodín ya no son compatibles con MySQL 8.0.16 ni versiones posteriores. Esto significa que MySQL no puede encontrar una coincidencia exacta para la base de datos y el usuario, lo que podría provocar que se omitan algunas asignaciones de privilegios existentes en la actualización.

Este problema afecta a MySQL 8.0.16 o versiones posteriores.

Para obtener más información, consulta Configura marcas de bases de datos y Administración de cuentas y seguridad.

Para resolver este problema, un administrador debe asignar permisos de forma manual a los usuarios en MySQL 8.0.

Cambios en los valores de las marcas entre MySQL 5.7 y MySQL 8.0

Cuando actualizas de MySQL 5.7 a MySQL 8.0, es posible que algunos valores de marcas de bases de datos cambien debido a un cambio en los valores predeterminados entre las versiones. Este comportamiento puede causar problemas de rendimiento.

Para obtener más información, consulta Nuevos valores predeterminados en MySQL 8.0.

Para resolver este problema, asegúrate de que los valores de las marcas de la base de datos asignados manualmente que se establecieron en MySQL 5.7 se sigan aplicando después de la actualización a MySQL 8.0 o una versión posterior. Te recomendamos que dejes los valores predeterminados asignados a las marcas del sistema.

¿Qué sigue?