「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > OutOfMemoryError を回避するために Spring で大規模な MySQL 結果セットをストリーミングする方法

OutOfMemoryError を回避するために Spring で大規模な MySQL 結果セットをストリーミングする方法

2024 年 12 月 22 日に公開
ブラウズ:499

How to Stream Large MySQL Result Sets in Spring to Avoid OutOfMemoryError?

MySQL を使用した大規模な結果セットのストリーミング

Spring アプリケーション内で広範な MySQL テーブルを処理する場合、ドライバーが次の処理を行うときに OutOfMemoryException が発生する可能性があります。テーブル全体をメモリにロードします。設定ステートメント.setFetchSize(Integer.MIN_VALUE);これは単に JDBC ドライバーにヒントを提供するだけなので、十分ではない可能性があります。

MySQL JDBC ドライバーで結果セットのストリーミングを有効にするには、より包括的なアプローチが必要です。

  1. ステートメント インスタンスの作成:

    stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
  2. フェッチを設定するサイズ:

    stmt.setFetchSize(Integer.MIN_VALUE);

注意事項:

このメソッドには、注意:

  • 結果セット内のすべての行を読み取る必要があります (または結果セットクローズ済み)、接続に対してさらにクエリを発行する前に。これを行わないと、例外が発生します。
  • トランザクション内では、ロックはトランザクションが完了した後にのみ解放されます。これは、ステートメントの実行を最初に終了する必要があることを意味します。
  • OutOfMemoryError が続く場合、根本的な問題が発生します。 Java コード内の過剰なメモリ使用に原因がある可能性があります。これには、ストレージではなく即時のデータ処理が必要になります。

追加の洞察:

大規模な結果セットの処理に関するさらなる戦略については、次の関連する質問とその回答を検討してください。 [同様の質問へのリンク].

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3