ホームページ >データベース >mysql チュートリアル >OutOfMemory エラーを発生させずに Spring で大規模な MySQL 結果セットを効率的にストリーミングする方法

OutOfMemory エラーを発生させずに Spring で大規模な MySQL 結果セットを効率的にストリーミングする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 01:17:12835ブラウズ

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

大規模な 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。