ホームページ >データベース >mysql チュートリアル >OutOfMemory エラーを発生させずに Spring で大規模な MySQL 結果セットを効率的にストリーミングする方法
大規模な MySQL 結果セットのストリーミング
問題の説明
大規模な MySQL テーブルをSpring アプリケーションでは、ドライバーがテーブル全体をロードしようとするため、OutOfMemory 例外が発生します。 メモリ。フェッチ サイズを Integer.MIN_VALUE に設定しているにもかかわらず、ResultSet を閉じるとハングの問題が発生します。ハングは小さなテーブルでも持続し、接続を閉じることができないため、次のようなスタック トレースが発生します。
[Stack trace of the hang inserted here]
解決策
フェッチ サイズの設定だけでは不十分です。 MySQL JDBC ドライバーには、特定のステートメント作成メソッドが必要です。
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
注意と影響
このアプローチには、いくつかの注意点があります。
その他の考慮事項
OutOfMemory 例外が続く場合は、過剰なメモリ割り当てを避けるために、データベースから取得したデータの即時処理を実装することを検討してください。これには、大幅なコードの再構築と異なるフロー制御アプローチが必要になる場合があります。
以上がOutOfMemory エラーを発生させずに Spring で大規模な MySQL 結果セットを効率的にストリーミングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。