ホームページ >データベース >mysql チュートリアル >OutOfMemoryErrors を回避するために MySQL から大きな結果セットを効率的にストリーミングするにはどうすればよいですか?

OutOfMemoryErrors を回避するために MySQL から大きな結果セットを効率的にストリーミングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-27 08:14:11720ブラウズ

How Can I Efficiently Stream Large Result Sets from MySQL to Avoid OutOfMemoryErrors?

MySQL からの大規模な結果セットのストリーミング

MySQL から大規模な結果セットを取得することは、特にアプリケーション メモリが制限されている場合に困難になることがあります。この問題は、JDBC ドライバーがテーブル全体をメモリにロードしようとしたときによく発生し、OutOfMemoryException が発生します。

setFetchSize() を使用する

これに対する 1 つの一般的な解決策問題は、setFetchSize() メソッドを使用して、フェッチされる行数を制限することです。データベース。ただし、MySQL JDBC ドライバーではストリーミングを有効にするための追加設定が必要なため、このアプローチだけでは必ずしも十分ではありません。

前方専用、読み取り専用ステートメントの作成

MySQL で結果セットのストリーミングを有効にするには、次のステートメントを作成する必要があります。 settings:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);

フェッチ サイズの設定

ステートメントが作成されたら、setFetchSize() メソッドを使用して、次のことを示唆する必要があります。大規模な結果セットが発生する可能性があるドライバー取得:

stmt.setFetchSize(Integer.MIN_VALUE);

ストリーミングの注意点

結果セットのストリーミングの制限と注意点を認識することが重要です:

  • 同じ結果セットに対して他のクエリを発行する前に、結果セット全体を読み取るか閉じる必要があります。 connection.
  • ステートメントがトランザクション内で使用される場合、ロックの問題が発生する可能性があります。ロックは、トランザクションが完了するか、すべての保留中の結果が読み取られるか、結果セットが閉じられる場合にのみ解放されます。

追加の考慮事項

使用しているにもかかわらず OutOfMemoryError が続く場合上記の設定では、データが利用可能になってもアプリケーションがすぐに処理していないことを示している可能性があります。これには、結果セット全体がメモリ内に保持されるのを避けるために、コードを再構築してデータを段階的に処理する必要があります。

以上がOutOfMemoryErrors を回避するために MySQL から大きな結果セットを効率的にストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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