Probleme mit hoher Laufwerksnutzung

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:

  1. Aktive Abfragen mit langer Ausführungszeit identifizieren.
  2. Sofortige Abhilfemaßnahmen.
  3. Abfragestatistiken verwenden.
  4. Eine Aufarbeitungsanalyse durchführen.
  5. Abfragen optimieren.
  6. 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- oder GROUP 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 r20260320 oder höher können Sie den PROCESS_ID Wert über die SESSION_ID Spalte der INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES Tabelle abrufen.

  • Bei früheren Versionen (Version r20260117 oder früher) können Sie den PROCESS_ID Wert aus der Ausgabe des SHOW FULL PROCESSLIST Vorgangs 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 Sie Slow_log und legen Sie long_query_time auf einen geeigneten Schwellenwert fest. In diesem Log werden Abfragen mit langer Ausführungszeit zur Analyse und Optimierung erfasst.

  • General_log. Prüfen Sie General_log (falls aktiviert) auf Abfragen, die während des Vorfallzeitraums protokolliert wurden und JOIN- oder SORT-Vorgänge enthalten, die möglicherweise große temporäre Dateien generiert haben. Andernfalls können Sie General_log aktivieren 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.