Problemas de uso elevado del disco

En esta página, se describen los problemas conocidos de uso elevado del disco y se ofrece ayuda para solucionar problemas.

Entre los problemas conocidos de uso elevado del disco, se incluyen los siguientes:

  • Uso elevado de archivos Temporary_files en MySQL 8.0 y versiones posteriores
  • Uso elevado de archivos Others en MySQL 8.0 y versiones anteriores

El consumo de archivos temporales se clasifica en archivos tmp_data en versiones anteriores a MySQL 8.0.

Métrica de desglose del almacenamiento de MySQL

La métrica principal que se usa para supervisar el uso detallado del disco es cloudsql.googleapis.com/database/disk/bytes_used_by_data_type. Esta métrica proporciona un desglose del uso del disco de la instancia por tipo de datos de la siguiente manera:

Tipo de datos Definición
Binlog Almacenamiento que usan los registros binarios de MySQL, que son esenciales para la recuperación y la replicación de un momento determinado
Cloudsql_mysql_audit_log Almacenamiento que usa el registro de auditoría de Cloud SQL para MySQL
Data Incluye los espacios de tabla InnoDB principales (archivos .ibd) y el espacio de tabla del sistema (ibdata1)
General_log Almacenamiento que usa el registro de consultas general
General_tablespace Almacenamiento que usa el espacio de tabla del sistema InnoDB, que consta de los archivos ibdata*
Last_sys_tablespace Almacenamiento que usa el espacio de tabla más reciente
Others Incluye archivos internos del sistema
Redo_log Almacenamiento que consumen los registros de rehacer InnoDB que se usan para la recuperación ante fallas
Relaylog Almacenamiento que usan los registros de retransmisión en una instancia de réplica durante la replicación
Slow_log Almacenamiento que usa el registro de consultas lentas si está habilitado y almacenado en el disco
Temporary files Almacenamiento con seguimiento explícito para archivos temporales creados por MySQL
Temporary_space Almacenamiento que usan los archivos temporales del sistema operativo en el directorio /tmp
Tmp_data Datos temporales creados por MySQL durante operaciones como la clasificación y la unión
Undo_log Almacenamiento que usan los registros de deshacer

Cómo ubicar archivos en las categorías Temporary_files y Others

Las consultas de larga duración (como las operaciones complejas JOIN, ORDER BY o GROUP BY) crean archivos temporales grandes en el directorio de MySQL.

En el caso de las instancias de MySQL que usan versiones de mantenimiento lanzadas a partir de abril de 2026, estos archivos temporales se informan de forma explícita en la categoría Temporary_files.

En versiones anteriores, los archivos temporales se informan en la categoría Others.

Soluciona problemas de uso elevado del disco

Para solucionar problemas de uso elevado del disco causados por archivos temporales grandes, sigue estos pasos:

  1. Identifica las consultas activas de larga duración.
  2. Mitigación inmediata.
  3. Usa Estadísticas de consultas.
  4. Realiza un análisis retrospectivo.
  5. Optimiza las consultas.
  6. Configura la supervisión y las alertas.

Identifica las consultas activas de larga duración

Los problemas de uso elevado del disco suelen ser causados por consultas de larga duración (como las operaciones complejas JOIN, ORDER BY o GROUP BY) que crean archivos temporales masivos en el directorio de MySQL. Estos archivos temporales se clasifican en las categorías Temporary_files o Others.

Las instancias de MySQL con versiones de mantenimiento nuevas (versión r20260320.00_00 y versiones posteriores) tienen la tabla INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES, que muestra los archivos temporales creados por consultas de larga duración y que MySQL no vincula (es decir, los archivos existen, pero no están vinculados al proceso de MySQL).

Usa la siguiente consulta para obtener la consulta activa de larga duración:

SELECT
otf.fd, otf.size, p.id, p.info, p.user
FROM
 INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES otf
LEFT JOIN
performance_schema.processlist p
ON
otf.SESSION_ID = p.ID;

Resultado de muestra:

+----+------------+------+----------------------------------+------+
| fd | size       | id   | info                             | user |
+----+------------+------+----------------------------------+------+
| 39 | 1670750208 |    8 | select * from t1 order by rand() | root |
| 40 | 1670750208 |    8 | select * from t1 order by rand() | root |
+----+------------+------+----------------------------------+------+
2 rows in set (0.00 sec)

En el caso de las instancias con versiones de mantenimiento r20260320.00_00 y versiones anteriores, usa la siguiente consulta para obtener la consulta activa de larga duración:

SHOW FULL PROCESSLIST;

En el resultado, busca las operaciones que suelen usar archivos temporales de disco:

  • Operaciones JOIN grandes, en especial sin índices adecuados
  • Operaciones complejas ORDER BY o GROUP BY en conjuntos de resultados grandes
  • Operaciones ALTER TABLE grandes

Mitigación inmediata

Si se identifica una consulta en ejecución como la fuente del consumo de disco de la investigación, puedes finalizarla para liberar el espacio de archivo temporal asociado.

Para finalizar la consulta, ejecuta el siguiente comando:

KILL PROCESS_ID;

Reemplaza PROCESS_ID por el ID de proceso de la consulta:

  • En el caso de las versiones de mantenimiento r20260320 o versiones posteriores, puedes recuperar el PROCESS_ID valor a través de la columna SESSION_ID de la tabla INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES.

  • En el caso de versiones anteriores (versión r20260117 o versiones anteriores) , puedes recuperar el PROCESS_ID valor del resultado de la SHOW FULL PROCESSLIST operación.

Después de finalizar una consulta responsable del consumo elevado de disco a través de archivos temporales, es posible que estos cambios tarden hasta 5 minutos en registrarse en las métricas de uso del disco.

Usa Estadísticas de consultas

Te recomendamos que uses Estadísticas de consultas para identificar y refinar las consultas de bajo rendimiento.

Si deseas obtener más información, consulta Usa las estadísticas de consultas para mejorar el rendimiento de las consultas.

Realiza un análisis retrospectivo

Cuando disminuya el aumento repentino del uso, puedes analizar los datos históricos para identificar la causa con lo siguiente:

  • Estadísticas de consultas. Busca consultas que puedan haber creado archivos temporales grandes. Examina las consultas que se muestran por resumen de consultas (incluidas métricas como el tiempo de ejecución promedio, la cantidad de consultas y el promedio de filas analizadas y mostradas).

  • Slow_log. Habilita Slow_log y establece long_query_time en un umbral adecuado. Este registro captura consultas de larga duración para el análisis y la optimización.

  • General_log. Verifica General_log (si está habilitado) para ver las consultas registradas durante el período del incidente que tienen operaciones JOIN o SORT que pueden haber generado archivos temporales grandes. De lo contrario, puedes habilitar General_log y capturar la consulta en el próximo evento de este tipo.

  • Métricas de Cloud Monitoring Revisa las siguientes métricas:

    • cloudsql.googleapis.com/database/mysql/tmp_disk_tables_created_count: Realiza un seguimiento de la cantidad de tablas temporales creadas en el disco, que suelen ser la causa de los archivos grandes no vinculados.
    • cloudsql.googleapis.com/database/mysql/handler_operations_count: Realiza un seguimiento del aumento de la cantidad de operaciones en ese momento.
    • cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: Realiza un seguimiento de las transacciones activas durante un período más largo.

    Un aumento en estas métricas que coincide con el aumento repentino del uso del disco sugiere que las consultas que generan tablas temporales grandes fueron la causa raíz.

  • Historial de transacciones Revisa las siguientes métricas:

    • cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric: Una longitud alta de la lista de historial puede deberse a transacciones de larga duración que bloquean la purga de los registros de deshacer, lo que también puede contribuir a problemas de uso del disco.
    • cloudsql.googleapis.com/database/mysql/innodb/active_trx_longest_time: Transacciones de larga duración durante el período de uso elevado del disco.

Optimiza las consultas

Una vez que el análisis de registros haya identificado las consultas específicas que causan aumentos repentinos de las métricas, puedes optimizarlas o volver a escribirlas para minimizar la generación de archivos temporales extensos.

Para optimizar una consulta, puedes hacer lo siguiente:

  • Agrega índices adecuados.
  • Refactoriza las uniones complejas o las operaciones de clasificación.

Para obtener más información, consulta Ajuste de consultas.

Configura la supervisión y las alertas

Para evitar incidentes futuros causados por el uso descontrolado del disco, en especial debido a archivos temporales generados a partir de consultas de larga duración, implementa la supervisión y las alertas proactivas con Monitoring.

Puedes crear alertas para las métricas que indican un consumo elevado de recursos o patrones de consultas que se sabe que generan archivos temporales grandes.

Nombre de la métrica Descripción Umbral de alertas recomendado
cloudsql.googleapis.com/database/disk/utilization El porcentaje de espacio en disco asignado utilizado.

Esta métrica supervisa el uso general de la capacidad del disco.

> 80% (sostenido durante 5 minutos)
cloudsql.googleapis.com/database/disk/bytes_used La cantidad total de bytes de espacio en disco que usa la instancia de base de datos.

Esta métrica realiza un seguimiento del crecimiento absoluto del consumo de disco.

Supervisa en comparación con la métrica database/disk/quota.

Para obtener información sobre cómo configurar alertas y supervisión para las métricas de Cloud SQL, consulta Descripción general de las alertas y Supervisa instancias de Cloud SQL.