Questa pagina descrive i problemi noti di utilizzo elevato del disco e offre assistenza per la risoluzione dei problemi.
I problemi noti di utilizzo elevato del disco includono:
- Utilizzo elevato dei file
Temporary_filesin MySQL 8.0 e versioni successive. - Utilizzo elevato dei file
Othersin MySQL 8.0 e versioni precedenti.
Il consumo di file temporanei è classificato nella categoria tmp_data nelle versioni precedenti a MySQL 8.0.
Metrica di suddivisione dello spazio di archiviazione di MySQL
La metrica principale utilizzata per monitorare l'utilizzo dettagliato del disco è cloudsql.googleapis.com/database/disk/bytes_used_by_data_type. Questa metrica fornisce una suddivisione dell'utilizzo del disco dell'istanza per tipo di dati come segue:
| Tipo di dati | Definizione |
|---|---|
Binlog |
Spazio di archiviazione utilizzato dai log binari di MySQL, essenziali per il recupero point-in-time e la replica. |
Cloudsql_mysql_audit_log |
Spazio di archiviazione utilizzato dal log di controllo di Cloud SQL MySQL. |
Data |
Include gli spazi delle tabelle InnoDB primari (file .ibd) e lo spazio delle tabelle di sistema (ibdata1). |
General_log |
Spazio di archiviazione utilizzato dal log delle query generali. |
General_tablespace |
Spazio di archiviazione utilizzato dallo spazio delle tabelle di sistema InnoDB, costituito dai file ibdata*. |
Last_sys_tablespace |
Spazio di archiviazione utilizzato dallo spazio delle tabelle più recente. |
Others |
Include i file di sistema interni. |
Redo_log |
Spazio di archiviazione utilizzato dai log di ripristino InnoDB utilizzati per il ripristino in caso di arresto anomalo. |
Relaylog |
Spazio di archiviazione utilizzato dai log di inoltro su un'istanza di replica durante la replica. |
Slow_log |
Spazio di archiviazione utilizzato dal log delle query lente se è abilitato e archiviato su disco. |
Temporary files |
Spazio di archiviazione monitorato in modo esplicito per i file temporanei creati da MySQL. |
Temporary_space |
Spazio di archiviazione utilizzato dai file temporanei del sistema operativo nella directory /tmp. |
Tmp_data |
Dati temporanei creati da MySQL durante operazioni come l'ordinamento e l'unione. |
Undo_log |
Spazio di archiviazione utilizzato dai log di annullamento. |
Individuare i file nelle categorie Temporary_files e Others
Le query a lunga esecuzione (ad esempio, operazioni JOIN, ORDER BY o GROUP BY complesse) creano file temporanei di grandi dimensioni nella directory MySQL.
Per le istanze MySQL che utilizzano le versioni di manutenzione rilasciate a partire da aprile 2026, questi file temporanei vengono segnalati in modo esplicito nella categoria Temporary_files.
Nelle versioni precedenti, i file temporanei vengono segnalati nella categoria Others.
Risolvere i problemi di utilizzo elevato del disco
Per risolvere i problemi di utilizzo elevato del disco causati da file temporanei di grandi dimensioni:
- Identifica le query attive a lunga esecuzione.
- Mitigazione immediata.
- Utilizza Query Insights.
- Esegui un'analisi retrospettiva.
- Ottimizza le query.
- Configura il monitoraggio e gli avvisi.
Identificare le query attive a lunga esecuzione
I problemi di utilizzo elevato del disco sono più spesso causati da query a lunga esecuzione (ad esempio, operazioni JOIN, ORDER BY o GROUP BY complesse) che creano file temporanei di grandi dimensioni nella directory MySQL. Questi file temporanei sono classificati nelle categorie Temporary_files o Others.
Le istanze MySQL con le nuove versioni di manutenzione (versione r20260320.00_00 e successive) hanno la tabella INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES che mostra i file temporanei creati dalle query a lunga esecuzione e non collegati (ovvero i file esistono, ma non sono collegati al processo MySQL) da MySQL.
Utilizza la seguente query per ottenere la query attiva a lunga esecuzione:
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;
Esempio di output:
+----+------------+------+----------------------------------+------+
| 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)
Per le istanze con versioni di manutenzione r20260320.00_00 e precedenti, utilizza la seguente query per ottenere la query attiva a lunga esecuzione:
SHOW FULL PROCESSLIST;
Nell'output, cerca le operazioni che utilizzano comunemente i file temporanei del disco:
- Operazioni
JOINdi grandi dimensioni, soprattutto senza indici appropriati. - Operazioni
ORDER BYoGROUP BYcomplesse su set di risultati di grandi dimensioni. - Operazioni
ALTER TABLEdi grandi dimensioni.
Mitigazione immediata
Se una query in esecuzione viene identificata come origine del consumo del disco durante l'indagine, puoi terminarla per liberare lo spazio dei file temporanei associato.
Per terminare la query, esegui il seguente comando:
KILL PROCESS_ID;
Sostituisci PROCESS_ID con l'ID processo della query:
Per le versioni di manutenzione
r20260320o successive, puoi recuperare il PROCESS_ID valore tramite la SESSION_ID colonna dellaINFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILEStabella.Per le versioni precedenti (versione
r20260117o precedenti) , puoi recuperare il PROCESS_ID valore dall'output dell'operazioneSHOW FULL PROCESSLIST.
Dopo la terminazione di una query responsabile dell'aumento del consumo del disco tramite file temporanei, potrebbero essere necessari fino a circa 5 minuti prima che queste modifiche vengano registrate nelle metriche di utilizzo del disco.
Utilizzare Query Insights
Ti consigliamo di utilizzare Query Insights per identificare e perfezionare le query con prestazioni lente.
Per ulteriori informazioni, consulta Utilizzare Query Insights per migliorare le prestazioni delle query.
Eseguire un'analisi retrospettiva
Una volta che il picco di utilizzo si è attenuato, puoi analizzare i dati storici per identificare la causa utilizzando quanto segue:
Query Insights. Controlla le query che potrebbero aver creato file temporanei di grandi dimensioni. Esamina le query elencate per digest delle query (incluse metriche come tempo di esecuzione medio, numero di query e media delle righe analizzate e restituite).
Slow_log. AbilitaSlow_loge impostalong_query_timesu una soglia appropriata. Questo log acquisisce le query a lunga esecuzione a scopo di analisi e ottimizzazione.General_log. ControllaGeneral_log(se abilitato) per le query registrate durante la finestra dell'incidente che hanno operazioniJOINoSORTche potrebbero aver generato file temporanei di grandi dimensioni. In caso contrario, puoi abilitareGeneral_loge acquisire la query nel prossimo evento di questo tipo.Metriche di Cloud Monitoring. Esamina le seguenti metriche:
cloudsql.googleapis.com/database/mysql/tmp_disk_tables_created_count: monitora il numero di tabelle temporanee create su disco, che spesso sono la causa di file non collegati di grandi dimensioni.cloudsql.googleapis.com/database/mysql/handler_operations_count: monitora l'aumento del numero di operazioni in quel periodo.cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: monitora le transazioni attive per un periodo di tempo più lungo.
Un aumento di queste metriche in concomitanza con il picco di utilizzo del disco suggerisce fortemente che le query che generano tabelle temporanee di grandi dimensioni sono state la causa principale.
Cronologia delle transazioni. Esamina le seguenti metriche:
cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric: una lunghezza elevata dell'elenco della cronologia può essere causata da transazioni a lunga esecuzione che bloccano l'eliminazione dei log di annullamento, il che può anche contribuire a problemi di utilizzo del disco.cloudsql.googleapis.com/database/mysql/innodb/active_trx_longest_time: transazioni a lunga esecuzione durante il periodo di utilizzo elevato del disco.
Ottimizzare le query
Una volta che l'analisi dei log ha individuato le query specifiche che causano picchi di metriche, puoi ottimizzarle o riscriverle per ridurre al minimo la generazione di file temporanei estesi.
Per ottimizzare una query, puoi:
- Aggiungere indici appropriati.
- Eseguire il refactoring di join o operazioni di ordinamento complesse.
Per ulteriori informazioni, consulta Ottimizzazione delle query.
Configurare il monitoraggio e gli avvisi
Per evitare futuri incidenti causati da un utilizzo incontrollato del disco, soprattutto a causa di file temporanei generati da query a lunga esecuzione, implementa il monitoraggio proattivo e gli avvisi utilizzando Monitoring.
Puoi creare avvisi per le metriche che indicano un consumo elevato di risorse o pattern di query noti per generare file temporanei di grandi dimensioni.
| Nome metrica | Descrizione | Soglia di avviso consigliata |
|---|---|---|
cloudsql.googleapis.com/database/disk/utilization |
La percentuale di spazio su disco allocato utilizzato.
Questa metrica monitora l'utilizzo complessivo della capacità del disco. |
> 80% (sostenuto per 5 minuti) |
cloudsql.googleapis.com/database/disk/bytes_used |
Il numero totale di byte di spazio su disco utilizzati dall'istanza del database.
Questa metrica monitora la crescita assoluta del consumo del disco. |
Monitora rispetto alla metrica database/disk/quota. |
Per scoprire come configurare gli avvisi e il monitoraggio per le metriche di Cloud SQL, consulta Panoramica degli avvisi e Monitorare le istanze Cloud SQL.