Problemas de uso intenso do disco

Esta página descreve problemas conhecidos de alto uso do disco e oferece ajuda para a solução de problemas.

Os problemas conhecidos de alto uso do disco incluem o seguinte:

  • Alto uso de arquivos Temporary_files no MySQL 8.0 e versões mais recentes.
  • Alto uso de arquivos Others no MySQL 8.0 e versões anteriores.

O consumo de arquivos temporários é categorizado em arquivos tmp_data em versões anteriores ao MySQL 8.0.

Métrica de detalhamento de armazenamento do MySQL

A principal métrica usada para monitorar o uso detalhado do disco é cloudsql.googleapis.com/database/disk/bytes_used_by_data_type. Essa métrica fornece um detalhamento do uso do disco da instância por tipo de dados, da seguinte maneira:

Tipo de dado Definição
Binlog Armazenamento usado por registros binários do MySQL, essencial para recuperação pontual e replicação.
Cloudsql_mysql_audit_log Armazenamento usado pelo registro de auditoria do Cloud SQL MySQL.
Data Inclui tablespaces InnoDB principais (arquivos .ibd) e o tablespace do sistema (ibdata1).
General_log Armazenamento usado pelo registro de consulta geral.
General_tablespace Armazenamento usado pelo tablespace do sistema InnoDB, que consiste nos arquivos ibdata*.
Last_sys_tablespace Armazenamento usado pelo tablespace mais recente.
Others Inclui arquivos internos do sistema.
Redo_log Armazenamento consumido por registros de refazer InnoDB usados para recuperação de falhas.
Relaylog Armazenamento usado por registros de retransmissão em uma instância de réplica durante a replicação.
Slow_log Armazenamento usado pelo registro de consulta lenta, se ativado e armazenado no disco.
Temporary files Armazenamento explicitamente rastreado para arquivos temporários criados pelo MySQL.
Temporary_space Armazenamento usado pelos arquivos temporários do sistema operacional no diretório /tmp.
Tmp_data Dados temporários criados pelo MySQL durante operações como classificação e junção.
Undo_log Armazenamento usado pelos registros de desfazer.

Como localizar arquivos nas categorias Temporary_files e Others

Consultas de longa duração (como operações complexas JOIN, ORDER BY ou GROUP BY) criam arquivos temporários grandes no diretório do MySQL.

Para instâncias do MySQL que usam versões de manutenção lançadas a partir de abril de 2026, esses arquivos temporários são informados explicitamente na categoria Temporary_files.

Em versões anteriores, os arquivos temporários são informados na categoria Others.

Resolver problemas de alto uso do disco

Para resolver problemas de alto uso do disco causados por arquivos temporários grandes, siga estas etapas:

  1. Identifique consultas ativas de longa duração.
  2. Mitigação imediata.
  3. Usar Query Insights.
  4. Realize uma análise retrospectiva.
  5. Otimizar consultas.
  6. Configure o monitoramento e os alertas.

Identificar consultas ativas de longa duração

Problemas de alto uso do disco são causados com mais frequência por consultas de longa duração (como operações complexas JOIN, ORDER BY ou GROUP BY) que criam arquivos temporários enormes no diretório do MySQL. Esses arquivos temporários são categorizados em Temporary_files ou Others.

As instâncias do MySQL com novas versões de manutenção (versão r20260320.00_00 e mais recentes) têm a tabela INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES, que mostra os arquivos temporários criados por consultas de longa duração e que não estão vinculados (ou seja, os arquivos existem, mas não estão vinculados ao processo do MySQL) pelo MySQL.

Use a consulta a seguir para receber a consulta ativa de longa duração:

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;

Exemplo de resposta:

+----+------------+------+----------------------------------+------+
| 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)

Para as instâncias com versões de manutenção r20260320.00_00 e anteriores, use a consulta a seguir para receber a consulta ativa de longa duração:

SHOW FULL PROCESSLIST;

Na saída, procure as operações que costumam usar arquivos temporários de disco:

  • Grandes operações JOIN, especialmente sem índices adequados.
  • Operações complexas ORDER BY ou GROUP BY em grandes conjuntos de resultados.
  • Grandes operações ALTER TABLE.

Mitigação imediata

Se uma consulta em execução for identificada como a origem do consumo de disco da investigação, você poderá encerrá-la para liberar o espaço do arquivo temporário associado.

Para encerrar a consulta, execute o seguinte comando:

KILL PROCESS_ID;

Substitua PROCESS_ID pelo ID do processo da consulta:

  • Para versões de manutenção r20260320 ou mais recentes, é possível recuperar o PROCESS_ID valor na coluna SESSION_ID da INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES tabela.

  • Para versões anteriores (versão r20260117 ou anterior) , é possível recuperar o PROCESS_ID valor na saída da SHOW FULL PROCESSLIST operação.

Após o encerramento de uma consulta responsável pelo consumo elevado de disco por arquivos temporários, pode levar até aproximadamente 5 minutos para que essas mudanças sejam registradas nas métricas de uso do disco.

Usar Query Insights

Recomendamos o uso do Query Insights para identificar e refinar consultas de desempenho lento.

Para mais informações, consulte Usar Query Insights para melhorar o desempenho da consulta.

Realizar uma análise retrospectiva

Quando o pico de uso diminuir, você poderá analisar os dados históricos para identificar a causa usando o seguinte:

  • Query Insights. Verifique se há consultas que possam ter criado arquivos temporários grandes. Examine as consultas listadas por resumo de consulta (incluindo métricas como tempo médio de execução, número de consultas e média de linhas verificadas e retornadas).

  • Slow_log. Ative o Slow_log e defina long_query_time como um limite adequado. Esse registro captura consultas de longa duração para análise e otimização.

  • General_log. Verifique General_log (se ativado) para consultas registradas durante a janela de incidentes que têm operações JOIN ou SORT que podem ter gerado arquivos temporários grandes. Caso contrário, ative o General_log e capture a consulta no próximo evento.

  • Métricas do Cloud Monitoring. Analise as seguintes métricas:

    • cloudsql.googleapis.com/database/mysql/tmp_disk_tables_created_count: rastreia o número de tabelas temporárias criadas no disco, que geralmente são a causa de arquivos grandes não vinculados.
    • cloudsql.googleapis.com/database/mysql/handler_operations_count: rastreia o número de operações que aumentam nesse período.
    • cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: rastreia as transações ativas por um período mais longo.

    Um aumento dessas métricas que coincide com o pico de uso do disco sugere fortemente que as consultas que geram tabelas temporárias grandes foram a causa raiz.

  • Histórico de transações. Analise as seguintes métricas:

    • cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric: um comprimento de lista de histórico alto pode ser causado por transações de longa duração que bloqueiam a limpeza dos registros de desfazer, o que também pode contribuir para problemas de uso do disco.
    • cloudsql.googleapis.com/database/mysql/innodb/active_trx_longest_time: transações de longa duração durante o período de alto uso do disco.

Otimizar consultas

Depois que a análise de registros identificar as consultas específicas que causam picos de métricas, você poderá otimizá-las ou reescrevê-las para minimizar a geração de arquivos temporários extensos.

Para otimizar uma consulta, faça o seguinte:

  • Adicione índices adequados.
  • Refatore junções complexas ou classifique operações.

Para mais informações, consulte Ajuste de consultas.

Configurar o monitoramento e os alertas

Para evitar incidentes futuros causados pelo uso descontrolado do disco, especialmente devido a arquivos temporários gerados por consultas de longa duração, implemente o monitoramento e os alertas proativos usando o Monitoring.

É possível criar alertas para métricas que indicam alto consumo de recursos ou padrões de consulta conhecidos por gerar arquivos temporários grandes.

Nome da métrica Descrição Limite de alerta recomendado
cloudsql.googleapis.com/database/disk/utilization A porcentagem de espaço em disco alocado utilizado.

Essa métrica monitora o uso geral da capacidade do disco.

Acima de 80% (sustentado por mais de 5 minutos)
cloudsql.googleapis.com/database/disk/bytes_used O total de bytes de espaço em disco usado pela instância do banco de dados.

Essa métrica rastreia o crescimento absoluto do consumo de disco.

Monitore em relação à métrica database/disk/quota.

Para saber como configurar alertas e monitoramento para métricas do Cloud SQL, consulte Visão geral de alertas e Monitorar instâncias do Cloud SQL.