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);
ストリーミングの注意点
結果セットのストリーミングの制限と注意点を認識することが重要です:
追加の考慮事項
使用しているにもかかわらず OutOfMemoryError が続く場合上記の設定では、データが利用可能になってもアプリケーションがすぐに処理していないことを示している可能性があります。これには、結果セット全体がメモリ内に保持されるのを避けるために、コードを再構築してデータを段階的に処理する必要があります。
以上がOutOfMemoryErrors を回避するために MySQL から大きな結果セットを効率的にストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。