Problemas conocidos y limitaciones para Amazon RDS para MySQL - Amazon Relational Database Service

Problemas conocidos y limitaciones para Amazon RDS para MySQL

Los siguientes son problemas conocidos y limitaciones para el uso en Amazon RDS para MySQL.

Palabra reservada InnoDB

InnoDB es una palabra reservada para RDS para MySQL. No puede utilizar este nombre para una base de datos MySQL.

Comportamiento completo del almacenamiento de información para Amazon RDS for MySQL

Cuando el almacenamiento se llena para una instancia de base de datos MySQL, puede haber inconsistencias de metadatos, descoincidencias de diccionario y tablas huérfanas. Para evitar estos problemas, detiene Amazon RDS automáticamente una instancia de base de datos que alcanza el storage-full estado.

Una instancia de base de datos MySQL alcanza el storage-full estado en los siguientes casos:

  • La instancia de base de datos tiene menos de 20.000 MiB de almacenamiento y el almacenamiento disponible alcanza 200 MiB o menos.

  • La instancia de base de datos tiene más de 102.400 MiB de almacenamiento y el almacenamiento disponible alcanza 1024 MiB o menos.

  • La instancia de base de datos tiene entre 20.000 MiB y 102.400 MiB de almacenamiento, y tiene menos del 1 % del almacenamiento disponible.

Después de Amazon RDS detener una instancia de base de datos automáticamente porque alcanzó el storage-full estado, aún puede modificarla. Para reiniciar la instancia de base de datos, complete al menos una de las siguientes opciones:

Después de realizar uno de estos cambios, la instancia de base de datos se reinicia automáticamente. Para obtener más información acerca de la modificación de una instancia de base de datos , consulte Modificación de una instancia de base de datos de Amazon RDS.

Incoherencia en el tamaño del grupo de búfer de InnoDB

En MySQL 5.7, existe actualmente un error en el modo en que se administra el tamaño del grupo de búfer de InnoDB. MySQL 5.7 puede establecer en el parámetro innodb_buffer_pool_size un valor elevado que puede provocar que el grupo de búfer de InnoDB crezca demasiado y ocupe demasiada memoria. Este efecto puede hacer que el motor de base de datos MySQL deje de funcionar o impedir que se inicie. El problema es más común en las clases de instancia de base de datos que tienen poca memoria disponible.

Para resolverlo, defina como valor del parámetro innodb_buffer_pool_size un múltiplo del valor resultante de multiplicar innodb_buffer_pool_instances por innodb_buffer_pool_chunk_size. Por ejemplo, puede definir como valor de innodb_buffer_pool_size ocho veces el producto de innodb_buffer_pool_instances por innodb_buffer_pool_chunk_size, como se indica en el ejemplo siguiente.

innodb_buffer_pool_chunk_size = 536870912 innodb_buffer_pool_instances = 4 innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184

Para obtener más detalles sobre este error de MySQL 5.7, consulte https://bugs.mysql.com/bug.php?id=79379 en la documentación de MySQL.

La optimización de combinación de índice devuelve resultados incorrectos

Las consultas que utilizan la optimización de combinación de índice podrían devolver resultados incorrectos debido a un error en el optimizador de consultas de MySQL introducidos en MySQL 5.5.37. Cuando realiza una consulta en una tabla con múltiples índices, el optimizador examina rangos de filas según múltiples índices, pero no combina los resultados correctamente. Para obtener más información acerca del error del optimizador de consultas, consulte http://bugs.mysql.com/bug.php?id=72745 y http://bugs.mysql.com/bug.php?id=68194 en la base de datos de errores de MySQL.

Por ejemplo, imagine una consulta en una tabla con dos índices donde los argumentos de la búsqueda hacen referencia a las columnas indexadas.

SELECT * FROM table1 WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';

En este caso, el motor de búsqueda buscará en los dos índices. Sin embargo, debido al error, los resultados combinados son incorrectos.

Para resolver este problema, puede seguir uno de estos pasos:

  • Establezca en el parámetro optimizer_switch el valor index_merge=off en el grupo de parámetros de base de datos de la instancia MySQL. Para obtener información acerca de cómo configurar los parámetros de un grupo de parámetros de base de datos, consulte Grupos de parámetros para Amazon RDS.

  • Actualice la instancia de base de datos MySQL a la versión de MySQL 5.7 u 8.0. Para obtener más información, consulte Actualización del motor de base de datos MySQL.

  • Si no puede actualizar la instancia ni cambiar el parámetro optimizer_switch, puede evitar el error identificando explícitamente un índice para la consulta, por ejemplo:

    SELECT * FROM table1 USE INDEX covering_index WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';

Para obtener más información, consulte Index merge optimization (Optimización de combinación de índice) en la documentación de MySQL.

Excepciones en los parámetros de MySQL para las instancias de base de datos de Amazon RDS

Algunos parámetros de MySQL requieren consideraciones especiales cuando se usan en una instancia de base de datos de Amazon RDS.

lower_case_table_names

Debido a que en el sistema de archivos de Amazon RDS se distingue entre mayúsculas y minúsculas, en el parámetro lower_case_table_names no se admite el valor 2 (los nombres se almacenan como se especifican pero se comparan en minúsculas). Los siguientes valores se admiten para instancias de base de datos de Amazon RDS para MySQL:

  • 0 (nombres almacenados como se indican y las comparaciones distinguen de mayúsculas y minúsculas) se admite para todas las versiones de para MySQL.

  • 1 (nombres almacenados en minúsculas y las comparaciones no distinguen entre mayúsculas y minúsculas) es compatible con las versiones 5.7, 8.0.28 y posteriores a la versión 8.0.

El parámetro lower_case_table_names debe definirse como parte de un grupo de parámetros de base de datos personalizado antes de crear una instancia de base de datos. Después, especifique el grupo de parámetros de base de datos personalizado al crear la instancia de base de datos.

Cuando un grupo de parámetros está asociado a una instancia de base de datos de MySQL con una versión inferior a 8.0, le recomendamos que evite cambiar el parámetro lower_case_table_names en el grupo de parámetros. Al cambiarlo, podría provocar incoherencias con las copias de seguridad de restauración a un momento dado y con las instancias de base de datos de réplica de lectura.

Cuando un grupo de parámetros está asociado a una instancia de base de datos de MySQL con una versión 8.0, usted no puede cambiar el parámetro lower_case_table_names en el grupo de parámetros.

En las réplicas de lectura siempre debe usarse el mismo valor del parámetro lower_case_table_names que en la instancia de base de datos de origen.

long_query_time

En el parámetro long_query_time puede establecer un valor en coma flotante para poder registrar las consultas lentas en el registro de consultas lentas de MySQL con una resolución de microsegundos. Por ejemplo, el valor 0,1 corresponde a 100 milisegundos, lo que ayuda a depurar transacciones lentas que duran menos de un segundo.

Límites de tamaño de archivo de MySQL en Amazon RDS

En las instancias de base de datos MySQL, el límite máximo de almacenamiento aprovisionado restringe el tamaño de una tabla a un tamaño máximo de 16 TB cuando se usan espacios de tabla fila-por-tabla de InnoDB. Este límite también restringe el espacio de tabla del sistema a un tamaño máximo de 16 TB. Los espacios fila-por-tabla de InnoDB (en los que las tablas están cada una en el propio espacio de tabla) se habilitan de manera predeterminada para las instancias de base de datos MySQL.

nota

Algunas instancias de base de datos existentes tienen un límite inferior. Por ejemplo, las instancias de base de datos MySQL creadas antes de abril de 2014 tienen un límite de tamaño de tabla y de archivo de 2 TB. Este límite de tamaño de archivo de 2 TB también afecta a las instancias de base de datos o las réplicas de lectura creadas a partir de instantáneas de base de datos tomadas antes de abril de 2014, con independencia de cuándo se creó la instancia de base de datos.

El uso de los espacios de tabla file-per-table de InnoDB tiene pros y contras en función de la aplicación. Para determinar el mejor método para su aplicación, consulte File-Per-Table Tablespaces en la documentación de MySQL.

No es recomendable permitir que las tablas crezcan hasta el tamaño de archivo máximo. En general, es preferible dividir los datos en tablas más pequeñas, que pueden mejorar el desempeño y los tiempos de recuperación.

Una opción que se puede usar para dividir una tabla grande en tablas más pequeñas es la creación de particiones. Las particiones distribuyen las porciones de una tabla grande en archivos independientes en función de las reglas que se hayan especificado. Por ejemplo, si almacena las transacciones por fecha, puede crear reglas de partición que distribuyan las transacciones más antiguas entre distintos archivos por medio de la creación de particiones. Después, periódicamente, se pueden archivar los datos de transacciones históricos que no tengan que estar disponibles de forma inmediata para su aplicación. Para obtener información, consulte Partitioning en la documentación de MySQL.

Como no existe una sola tabla o vista del sistema que proporcione el tamaño de todas las tablas y del espacio de tablas del sistema InnoDB, debe consultar varias tablas para determinar el tamaño de los espacios de tablas.

Determinación del tamaño del espacio de tablas del sistema InnoDB y del espacio de tablas del diccionario de datos
  • Utilice el comando SQL siguiente para determinar si algún espacio de tablas es demasiado grande y por lo tanto es candidato para particiones.

    nota

    El espacio de tablas del diccionario de datos es específico de MySQL 8.0.

    select FILE_NAME,TABLESPACE_NAME, ROUND(((TOTAL_EXTENTS*EXTENT_SIZE) /1024/1024/1024), 2) as "File Size (GB)" from information_schema.FILES where tablespace_name in ('mysql','innodb_system');
Para determinar el tamaño de las tablas de usuario de InnoDB fuera del espacio de tablas del sistema InnoDB (para las versiones de MySQL 5.7)
  • Utilice el comando SQL siguiente para determinar si alguna de las tablas es demasiado grande y por lo tanto es candidata para particiones.

    SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
Para determinar el tamaño de las tablas de usuario de InnoDB fuera del espacio de tablas del sistema InnoDB (para las versiones de MySQL 8.0)
  • Utilice el comando SQL siguiente para determinar si alguna de las tablas es demasiado grande y por lo tanto es candidata para particiones.

    SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_TABLESPACES ORDER BY 3 DESC;
Para determinar el tamaño de las tablas de usuario distintas de InnoDB
  • Utilice el siguiente comando SQL para determinar si alguna de las tablas distintas de InnoDB es demasiado grande.

    SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE) / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema') and ENGINE<>'InnoDB';
Para habilitar espacios de tablas file-per-table de InnoDB
  • Establezca el parámetro  innodb_file_per_table en 1 en el grupo de parámetros para la instancia de base de datos.

Para deshabilitar los espacios de tablas file-per-table de InnoDB
  • Establezca el parámetro  innodb_file_per_table en 0 en el grupo de parámetros para la instancia de base de datos.

Para obtener más información acerca de la actualización de un grupo de parámetros, consulte Grupos de parámetros para Amazon RDS.

Cuando haya habilitado o deshabilitado espacios de tablas file-per-table de InnoDB, puede ejecutar el comando ALTER TABLE para mover una tabla del espacio de tablas global a su propio espacio de tablas o viceversa, como se muestra en el ejemplo siguiente:

ALTER TABLE table_name TABLESPACE=innodb_file_per_table;

Complemento de llavero de MySQL no compatible

Actualmente, Amazon RDS para MySQL no admite el complemento de llavero de Amazon Web Services keyring_aws de MySQL.

Puertos personalizados

Amazon RDS bloquea las conexiones al puerto personalizado 33060 para el motor de MySQL. Elija un puerto diferente para su motor de MySQL.

Limitaciones del procedimiento almacenado de MySQL

Los procedimientos almacenados mysql.rds_kill y mysql.rds_kill_query no pueden finalizar las sesiones o consultas propiedad de usuarios de MySQL con nombres de usuario de más de 16 caracteres en las siguientes versiones de RDS para MySQL:

  • Versión 8.0.32 y anteriores a la 8

  • Versión 5.7.41 y anteriores a 5.7

Replicación basada en GTID con una instancia de origen externa

Amazon RDS admite la replicación basada en identificadores de transacciones globales (GTID) desde una instancia de MySQL externa en una instancia de base de datos de Amazon RDS para MySQL que requiere el ajuste de GTID_PURGED durante la configuración. Sin embargo, solo la versión 8.0.37 y versiones posteriores de RDS para MySQL admiten esta funcionalidad.

Complemento de autenticación predeterminado de MySQL

Las versiones 8.0.34 y posteriores de RDS para MySQL utilizan el complemento mysql_native_password. No se puede cambiar la configuración de default_authentication_plugin.

Anulación de innodb_buffer_pool_size

En el caso de las clases de microinstancias o instancias pequeñas de base de datos, el valor predeterminado del parámetro innodb_buffer_pool_size puede diferir del valor devuelto al ejecutar el siguiente comando:

mysql> SELECT @@innodb_buffer_pool_size;

Esta diferencia puede producirse cuando Amazon RDS necesita anular el valor predeterminado como parte de la administración de las clases de instancias de base de datos. Si es necesario, puede anular el valor predeterminado y establecerlo en un valor que admita la clase de instancia de base de datos. Para determinar un valor válido, añada el uso de memoria y la memoria total disponible en la instancia de base de datos. Para obtener más información, consulte Tipos de instancias de Amazon RDS.

Si su instancia de base de datos tiene solo 4 GB de memoria, no puede configurar innodb_buffer_pool_size en 8 GB, pero puede configurarla en 3 GB, en función de la cantidad de memoria que haya asignado a otros parámetros.

Si el valor que introduce es demasiado grande, Amazon RDS lo reduce a los siguientes límites:

  • Clases de microinstancias de base de datos: 256 MB

  • Clases de instancias de base de datos db.t4g.micro: 128 MB