Problemas de uso intenso do disco

Esta página descreve problemas conhecidos de alto uso de disco e oferece ajuda para solucionar problemas.

Os problemas conhecidos de alto uso do disco incluem:

  • Uso alto 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 do armazenamento do MySQL

A métrica principal 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 forma:

Tipo de dado Definição
Binlog Armazenamento usado pelos registros binários do MySQL, essencial para recuperação pontual e replicação.
Cloudsql_mysql_audit_log Armazenamento usado pelo registro de auditoria do MySQL do Cloud SQL.
Data Inclui os tablespaces InnoDB principais (arquivos .ibd) e o tablespace do sistema (ibdata1).
General_log Armazenamento usado pelo registro de consultas gerais.
General_tablespace Armazenamento usado pelo tablespace do sistema InnoDB, que consiste nos arquivos ibdata*.
Last_sys_tablespace Armazenamento usado pelo último tablespace.
Others Inclui arquivos internos do sistema.
Redo_log Armazenamento consumido pelos registros redo 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 ele estiver ativado e armazenado em 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 de 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 eram informados na categoria Others.

Resolver problemas de uso elevado do disco

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

  1. Identifique consultas ativas de longa duração.
  2. Mitigação imediata.
  3. Use insights de consulta.
  4. Faça 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 de disco são causados com mais frequência por consultas de longa duração (como operações complexas de 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).

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 seguinte consulta 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:

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

Mitigação imediata

Se uma consulta em execução for identificada como a origem do consumo de disco na investigação, encerre-a 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 valor PROCESS_ID na coluna SESSION_ID da tabela INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES.

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

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

Usar Query Insights

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

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

Fazer uma análise retrospectiva

Quando o pico de uso diminuir, analise os dados históricos para identificar a causa usando o seguinte:

  • Insights de consulta. Verifique se há consultas que podem ter criado arquivos temporários grandes. Analise 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 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 o período do incidente 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 desse tipo.

  • 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 aumento no número de operações por volta desse horário.
    • cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: rastreia as transações ativas por um período mais longo.

    Um aumento nessas 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 principal.

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

    • cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric: um tamanho grande da lista de histórico 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, otimize ou reescreva-as para minimizar a geração de arquivos temporários extensos.

Para otimizar uma consulta, faça o seguinte:

  • Adicione os índices adequados.
  • Refatore junções ou operações de classificação complexas.

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

Configurar o monitoramento e os alertas

Para evitar incidentes futuros causados pelo uso descontrolado do disco, principalmente devido a arquivos temporários gerados por consultas de longa duração, implemente o monitoramento e 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 do espaço em disco alocado utilizado.

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

> 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 de banco de dados.

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

Monitore a métrica database/disk/quota.

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