Auf dieser Seite werden bekannte Probleme mit hoher Laufwerknutzung beschrieben und Hilfe zur Fehlerbehebung angeboten.
Zu den bekannten Problemen mit hoher Laufwerknutzung gehören:
- Hohe Nutzung von
Temporary_files-Dateien in MySQL 8.0 und höher. - Hohe Nutzung von
Others-Dateien in MySQL 8.0 und früher.
Der Verbrauch temporärer Dateien wird in Versionen vor MySQL 8.0 unter tmp_data-Dateien kategorisiert.
Messwert für die Aufschlüsselung des MySQL-Speichers
Der primäre Messwert zur Überwachung der detaillierten Laufwerknutzung ist cloudsql.googleapis.com/database/disk/bytes_used_by_data_type. Dieser Messwert bietet eine Aufschlüsselung der Laufwerknutzung der Instanz nach Datentyp:
| Datentyp | Definition |
|---|---|
Binlog |
Von MySQL-Binärlogs verwendeter Speicherplatz, der für die Wiederherstellung zu einem bestimmten Zeitpunkt und die Replikation unerlässlich ist. |
Cloudsql_mysql_audit_log |
Vom Cloud SQL MySQL-Audit-Log verwendeter Speicherplatz. |
Data |
Enthält primäre InnoDB Tabellenbereiche (.ibd Dateien) und den System
Tabellenbereich (ibdata1). |
General_log |
Vom allgemeinen Abfragelog verwendeter Speicherplatz. |
General_tablespace |
Vom InnoDB-Systemtabellenbereich verwendeter Speicherplatz, der aus den ibdata*-Dateien besteht. |
Last_sys_tablespace |
Vom neuesten Tabellenbereich verwendeter Speicherplatz. |
Others |
Enthält interne Systemdateien. |
Redo_log |
Von InnoDB-Redo-Logs belegter Speicherplatz, der für die Wiederherstellung nach einem Absturz verwendet wird. |
Relaylog |
Von Relay-Logs auf einer Replikatinstanz während der Replikation verwendeter Speicherplatz. |
Slow_log |
Vom Log für langsame Abfragen verwendeter Speicherplatz, wenn es aktiviert und auf dem Laufwerk gespeichert ist. |
Temporary files |
Explizit erfasster Speicherplatz für temporäre Dateien, die von MySQL erstellt wurden. |
Temporary_space |
Von den temporären Dateien des Betriebssystems im Verzeichnis /tmp verwendeter Speicherplatz. |
Tmp_data |
Temporäre Daten, die von MySQL bei Vorgängen wie Sortieren und Verknüpfen erstellt wurden. |
Undo_log |
Von den Undo-Logs verwendeter Speicherplatz. |
Dateien in den Kategorien Temporary_files und Others finden
Bei Abfragen mit langer Ausführungszeit (z. B. komplexe JOIN-, ORDER BY- oder GROUP BY-Vorgänge) werden große temporäre Dateien im MySQL-Verzeichnis erstellt.
Bei MySQL-Instanzen mit Wartungsversionen, die ab April 2026 veröffentlicht wurden, werden diese temporären Dateien explizit unter der Kategorie Temporary_files gemeldet.
In früheren Versionen werden die temporären Dateien unter der Kategorie Others gemeldet.
Fehlerbehebung bei hoher Laufwerknutzung
So beheben Sie Probleme mit hoher Laufwerknutzung, die durch große temporäre Dateien verursacht werden:
- Aktive Abfragen mit langer Ausführungszeit identifizieren.
- Sofortige Abhilfemaßnahmen.
- Abfragestatistiken verwenden.
- Eine Aufarbeitungsanalyse durchführen.
- Abfragen optimieren.
- Monitoring und Benachrichtigungen einrichten.
Aktive Abfragen mit langer Ausführungszeit identifizieren
Probleme mit hoher Laufwerknutzung werden am häufigsten durch Abfragen mit langer Ausführungszeit (z. B. komplexe JOIN-, ORDER BY- oder GROUP BY-Vorgänge) verursacht, die große temporäre Dateien im MySQL-Verzeichnis erstellen. Diese temporären Dateien werden unter den Kategorien Temporary_files oder Others kategorisiert.
Die MySQL-Instanzen mit neuen Wartungsversionen (Version r20260320.00_00 und höher) haben die Tabelle INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES, in der die temporären Dateien angezeigt werden, die von Abfragen mit langer Ausführungszeit erstellt wurden und nicht verknüpft sind (d. h. die Dateien sind vorhanden, aber nicht mit dem MySQL-Prozess verknüpft).
Verwenden Sie die folgende Abfrage, um die aktive Abfrage mit langer Ausführungszeit abzurufen:
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;
Beispielausgabe:
+----+------------+------+----------------------------------+------+
| 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)
Verwenden Sie für die Instanzen mit Wartungsversionen r20260320.00_00 und früher die folgende Abfrage, um die aktive Abfrage mit langer Ausführungszeit abzurufen:
SHOW FULL PROCESSLIST;
Suchen Sie in der Ausgabe nach den Vorgängen, bei denen häufig temporäre Dateien auf dem Laufwerk verwendet werden:
- Große
JOIN-Vorgänge, insbesondere ohne geeignete Indexe. - Komplexe
ORDER BY- oderGROUP BY-Vorgänge für große Ergebnismengen. - Große
ALTER TABLE-Vorgänge.
Sofortige Abhilfemaßnahmen
Wenn eine laufende Abfrage als Ursache für den Laufwerkverbrauch ermittelt wird, können Sie sie beenden, um den zugehörigen Speicherplatz für temporäre Dateien freizugeben.
Führen Sie den folgenden Befehl aus, um die Abfrage zu beenden:
KILL PROCESS_ID;
Ersetzen Sie PROCESS_ID durch die Prozess-ID der Abfrage:
Bei Wartungsversionen
r20260320oder höher können Sie den PROCESS_ID Wert über die SESSION_ID Spalte derINFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILESTabelle abrufen.Bei früheren Versionen (Version
r20260117oder früher) können Sie den PROCESS_ID Wert aus der Ausgabe desSHOW FULL PROCESSLISTVorgangs abrufen.
Nach dem Beenden einer Abfrage, die für den erhöhten Laufwerkverbrauch durch temporäre Dateien verantwortlich ist, kann es bis zu fünf Minuten dauern, bis diese Änderungen in den Messwerten zur Laufwerknutzung erfasst werden.
Abfragestatistiken verwenden
Wir empfehlen, Abfragestatistiken zu verwenden, um Abfragen mit schlechter Leistung zu identifizieren und zu optimieren.
Weitere Informationen finden Sie unter Abfragestatistiken verwenden, um die Abfrageleistung zu verbessern.
Eine Aufarbeitungsanalyse durchführen
Nachdem der Nutzungsanstieg nachgelassen hat, können Sie Verlaufsdaten analysieren, um die Ursache zu ermitteln. Verwenden Sie dazu Folgendes:
Abfragestatistiken. Suchen Sie nach Abfragen, die möglicherweise große temporäre Dateien erstellt haben. Untersuchen Sie die nach Abfrage-Digest aufgelisteten Abfragen, einschließlich Messwerten wie durchschnittliche Ausführungszeit, Anzahl der Abfragen und durchschnittliche Anzahl der gescannten und zurückgegebenen Zeilen.
Slow_log. Aktivieren SieSlow_logund legen Sielong_query_timeauf einen geeigneten Schwellenwert fest. In diesem Log werden Abfragen mit langer Ausführungszeit zur Analyse und Optimierung erfasst.General_log. Prüfen SieGeneral_log(falls aktiviert) auf Abfragen, die während des Vorfallzeitraums protokolliert wurden undJOIN- oderSORT-Vorgänge enthalten, die möglicherweise große temporäre Dateien generiert haben. Andernfalls können SieGeneral_logaktivieren und die Abfrage beim nächsten solchen Ereignis erfassen.Cloud Monitoring-Messwerte. Prüfen Sie die folgenden Messwerte:
cloudsql.googleapis.com/database/mysql/tmp_disk_tables_created_count: Erfasst die Anzahl der auf dem Laufwerk erstellten temporären Tabellen, die häufig die Ursache für große nicht verknüpfte Dateien sind.cloudsql.googleapis.com/database/mysql/handler_operations_count: Erfasst die Anzahl der Vorgänge, die zu diesem Zeitpunkt zugenommen haben.cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: Erfasst die Transaktionen, die über einen längeren Zeitraum aktiv sind.
Ein Anstieg dieser Messwerte, der mit dem Anstieg der Laufwerknutzung zusammenfällt, deutet stark darauf hin, dass Abfragen, die große temporäre Tabellen generieren, die Ursache waren.
Transaktionsverlauf. Prüfen Sie die folgenden Messwerte:
cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric:Eine hohe Länge der Verlaufsliste kann durch Transaktionen mit langer Ausführungszeit verursacht werden, die das Löschen von Undo-Logs blockieren, was ebenfalls zu Problemen mit der Laufwerknutzung beitragen kann.cloudsql.googleapis.com/database/mysql/innodb/active_trx_longest_time: Transaktionen mit langer Ausführungszeit während des Zeitraums mit hoher Laufwerknutzung.
Abfragen optimieren
Sobald die Loganalyse die spezifischen Abfragen ermittelt hat, die Messwertspitzen verursachen, können Sie sie optimieren oder neu schreiben, um die Erstellung umfangreicher temporärer Dateien zu minimieren.
So optimieren Sie eine Abfrage:
- Fügen Sie geeignete Indexe hinzu.
- Refaktorieren Sie komplexe Verknüpfungen oder Sortiervorgänge.
Weitere Informationen finden Sie unter Abfrageoptimierung.
Monitoring und Benachrichtigungen einrichten
Um zukünftige Vorfälle zu vermeiden, die durch unkontrollierte Laufwerknutzung verursacht werden, insbesondere durch temporäre Dateien, die durch Abfragen mit langer Ausführungszeit generiert werden, implementieren Sie proaktives Monitoring und Benachrichtigungen mit Monitoring.
Sie können Benachrichtigungen für Messwerte erstellen, die auf einen hohen Ressourcenverbrauch oder Abfragemuster hinweisen, die bekanntermaßen große temporäre Dateien generieren.
| Messwertname | Beschreibung | Empfohlener Benachrichtigungsschwellenwert |
|---|---|---|
cloudsql.googleapis.com/database/disk/utilization |
Der Prozentsatz des zugewiesenen Speicherplatzes, der genutzt wird.
Dieser Messwert überwacht die Gesamtnutzung der Laufwerkkapazität. |
> 80% (über 5 Minuten) |
cloudsql.googleapis.com/database/disk/bytes_used |
Die Gesamtzahl der Byte des von der Datenbankinstanz verwendeten Speicherplatzes.
Dieser Messwert erfasst das absolute Wachstum des Laufwerkverbrauchs. |
Mit dem Messwert database/disk/quota vergleichen. |
Informationen zum Einrichten von Benachrichtigungen und Monitoring für Cloud SQL-Messwerte finden Sie unter Benachrichtigungen und Cloud SQL-Instanzen überwachen.