Heim >Datenbank >MySQL-Tutorial >Wie kann man große MySQL-Ergebnismengen im Frühjahr effizient ohne OutOfMemory-Fehler streamen?
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:
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!