La base de datos está creando tablas temporales en el disco
El uso reciente de la tabla temporal en el disco ha aumentado de forma significativa hasta el porcentaje
. La base de datos está creando alrededor de número
tablas temporales por segundo. Esto podría afectar al rendimiento y aumentar las operaciones de disco en db-instance
.
Temas
Versiones del motor admitidas
Esta información es compatible con todas las versiones de Aurora MySQL.
Contexto
A veces es necesario que el servidor MySQL cree una tabla temporal interna mientras procesa una consulta. Aurora MySQL puede contener una tabla temporal interna en la memoria, donde puede procesarla TempTable o el motor de almacenamiento MEMORY, o bien InnoDB puede almacenarla en disco. Para obtener más información, consulte Internal Temporary Table Use in MySQL
Causas probables de este problema
El aumento de las tablas temporales en disco indica el uso de consultas complejas. Si la memoria configurada no es suficiente para almacenar tablas temporales en la memoria, Aurora MySQL crea las tablas en el disco. Esto puede afectar al rendimiento y aumentar las operaciones en disco.
Acciones
Recomendamos diferentes acciones en función de las causas.
-
En Aurora MySQL versión 3, le recomendamos que utilice el motor de almacenamiento TempTable.
-
Optimice sus consultas para devolver menos datos. Para ello, seleccione solo las columnas necesarias.
Si activa el esquema de rendimiento con todos los instrumentos
statement
habilitados y cronometrados, puede realizar consultas aSYS.statements_with_temp_tables
para recuperar la lista de consultas que utilizan tablas temporales. Para obtener más información, consulte Prerequisites for Using the sys Schema(Requisitos previos para utilizar el esquema sys) en la documentación de MySQL. -
Considere la posibilidad de indexar las columnas que participan en las operaciones de clasificación y agrupación.
-
Reescriba sus consultas para evitar columnas
BLOB
yTEXT
. Estas columnas siempre usan el disco. -
Ajuste los siguientes parámetros de la base de datos:
tmp_table_size
ymax_heap_table_size
.El valor predeterminado para este parámetro es 16 MiB. Cuando se utiliza el motor de almacenamiento MEMORY para tablas temporales en memoria, su tamaño máximo se define mediante el valor
tmp_table_size
omax_heap_table_size
, el que sea menor. Cuando se alcanza este tamaño máximo, MySQL convierte automáticamente la tabla temporal interna en memoria en una tabla temporal interna en disco de InnoDB. Para obtener más información, consulte Use the TempTable storage engine on Amazon RDS for MySQL and Amazon Aurora MySQL(Utilice el motor de almacenamiento TempTable en Amazon RDS para MySQL y Amazon Aurora MySQL). nota
Al crear tablas MEMORY de forma explícita con CREATE TABLE, solo la variable
max_heap_table_size
determina el tamaño al que puede crecer una tabla. Tampoco hay ninguna conversión a un formato en disco.
Métricas relevantes
Las siguientes métricas de Información sobre el rendimiento están relacionadas con esta información:
-
Created_tmp_disk_tables
-
Created_tmp_tables
Para obtener más información, consulte Created_tmp_disk_tables