3

ResultSetタイトルの通り、Javaオブジェクトが認識する最大サイズは?特にsetFetchSize関数。

ResultSet results...;
results.setFetchSize(HUGE_VALUE);

さらに言えば、「最大」がない場合、フェッチのサイズを制限する要因は何ですか?

コメント

int はデータ型なので、MAX_INT までは受け入れられると思いますが、残りはドライバーの実装に依存します。

それは私の質問とほとんど関係がないかもしれませんが、私はそれに何を渡すことができるかではなく、何が認識されるかを尋ねました。髪を割るように聞こえるかもしれませんが、それがこの質問の性質です。

アップデート

これは「本当の質問ではない」近い投票を得ているようです。これは、Oracle JDBC ドライバー専用ですojdbc14。誰かが以下に投稿したように、私は何億もの結果セットを引き戻しているので、私のテストに基づく正しいフェッチ サイズの正しい答えには 30 または 200 はほど遠いです。現時点では、フェッチ サイズは1 です10,000,000が、データベースが 1,000 万のサイズを使用していることを確認する方法はありません。さらに、データベースのヒントがどのように機能するかを理解しており、多くの場合、提供したヒントをデータベースに使用させることができます。

4

2 に答える 2

0

このsetFetchSize()方法はあなたが思っているようなことをしていないのではないかと思います。10,000,000 のような値を使用する前に、次の 2 つの記事をよく読んで、本格的なプロファイリングを行うことをお勧めします。 この記事では、JDBC が Oracle のプリフェッチ機能とどのようにsetFetchSize同等であるかについて説明します。また、簡単なプロファイリングをセットアップして、さまざまなフェッチ サイズの影響を調べる方法も示します。 この記事(最初のリンク先) では、プリフェッチに最大値 (MAX_INT を想定している場合を除く) がないことを説明していますが、数百をはるかに超える値を使用しないように警告しています。2 番目の記事では、次のことにも言及しており、setFetchSize とプリフェッチとの関連性をさらに確認しています。

JDBC 2.0 フェッチ サイズのアプリケーション プログラミング インターフェイス (API) と Oracle 行プリフェッチ API をアプリケーションで混在させないでください。どちらか一方を使用できますが、両方を使用することはできません。

于 2012-12-15T05:24:48.620 に答える
-1

これはデータベースへのヒントです。このヒントを使用しない人もいます。他のものは、int データ型の制限まで非常に大きな値を許可する場合があります。ただし、ほとんどの人は、このヒントを妥当な最大値まで受け入れるでしょう。この数値が大きいほど、結果を処理する際により多くのメモリを使用する必要があることに注意してください。

これは単なる好奇心ですか、それともデータベースの最大フェッチ サイズに設定する予定ですか? 後者の場合、私はあなたにそれを強く勧めます. 代わりに、さまざまなフェッチ サイズのヒントに基づいて、いくつかのテストとパフォーマンス テストを修正します。一部のデータベースでは、30 が最適である場合があり、200 では処理がさらに遅くなります。適切な数は、行のサイズや BLOB データなどによっても異なります。

したがって、より良い質問は、この特定のデータベースでのこのクエリの最適なフェッチ サイズはどれくらいかということです。答えは、それらを試してパフォーマンスを測定することです。

于 2012-12-14T22:05:38.720 に答える