ホームページ >データベース >mysql チュートリアル >OutOfMemoryError を回避するために Spring で大規模な MySQL 結果セットをストリーミングする方法

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

DDD
DDDオリジナル
2024-11-30 01:20:10633ブラウズ

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 コード内の過剰なメモリ使用に原因がある可能性があります。これには、ストレージではなく即時データ処理が必要になります。

追加の洞察:

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

以上がOutOfMemoryError を回避するために Spring で大規模な MySQL 結果セットをストリーミングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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