Heim >Datenbank >MySQL-Tutorial >Wie kann man große MySQL-Ergebnismengen im Frühjahr effizient ohne OutOfMemory-Fehler streamen?

Wie kann man große MySQL-Ergebnismengen im Frühjahr effizient ohne OutOfMemory-Fehler streamen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 01:17:12730Durchsuche

How to Efficiently Stream Large MySQL Result Sets in Spring Without OutOfMemory Errors?

Streaming großer MySQL-Ergebnismengen

Problembeschreibung

Beim Laden großer MySQL-Tabellen in eine In der Spring-Anwendung treten OutOfMemory-Ausnahmen auf, wenn der Treiber versucht, die gesamte Tabelle in den Speicher zu laden. Obwohl die Abrufgröße auf Integer.MIN_VALUE festgelegt ist, führt das Schließen von ResultSets zu hängenden Problemen. Der Hang bleibt auch bei kleinen Tabellen bestehen und verhindert das Schließen der Verbindung, was zu folgendem Stack-Trace führt:

[Stack trace of the hang inserted here]

Lösung

Das Festlegen nur der Abrufgröße ist unzureichend. Der MySQL-JDBC-Treiber erfordert eine bestimmte Methode zur Anweisungserstellung:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

Vorsichtsmaßnahmen und Implikationen

Dieser Ansatz weist mehrere Einschränkungen auf:

  • Alle Zeilen im Ergebnissatz müssen gelesen werden, bevor andere Abfragen ausgeführt werden können.
  • Sperren werden erst freigegeben, wenn die Transaktion oder Die Anweisung ist abgeschlossen oder die aktive Ergebnismenge ist geschlossen.

Zusätzliche Überlegungen

Wenn die OutOfMemory-Ausnahme weiterhin besteht, sollten Sie die Implementierung einer sofortigen Verarbeitung der aus dem abgerufenen Daten in Betracht ziehen Datenbank, um eine übermäßige Speicherzuweisung zu vermeiden. Dies erfordert möglicherweise eine erhebliche Umstrukturierung des Codes und einen anderen Ansatz zur Flusskontrolle.

Das obige ist der detaillierte Inhalt vonWie kann man große MySQL-Ergebnismengen im Frühjahr effizient ohne OutOfMemory-Fehler streamen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn