3

OpenJPA は、FetchPlan でいくつかのパラメーターを提供しました。(http://openjpa.apache.org/builds/1.2.0/apidocs/org/apache/openjpa/persistence/FetchPlan.html) そして、そのうちの 1 つである FetchBatchSize で行き詰まりました。誰かが自分の経験を親切に共有してくれることを願っています。

これがシナリオです。たとえば、データベース (MS-SQL) から最大 1000 レコードを選択するとします。

  1. FetchBatchSize を 100 に設定すると、時間コストが劇的に 2 秒未満に短縮されました。これは良いことですが、FetchBatchSize 100 より少ない 50 レコードのみを取得しようとすると、はるかに長い時間がかかります。 (私のテストでは50秒)これは受け入れられません。

  2. わかりましたので、FetchBatchSize がユーザーが希望する数を超えると、さらに時間がかかると思います。ユーザーが設定したカウントに従って、実行時に FetchBatchSize を変更できます。あなたは 1000 が必要で、私は FetchBatchSize を 1000 に設定し、あなたは 100 が必要で、私はそれを 50 に設定しましたが、ユーザーが少数のレコードしか必要としない場合はどうでしょうか? 私も FetchBatchSize を 2 のように設定しますか?

私の質問は、maxResultCount が可変の場合に適切な FetchBatchSize を選択する方法ですか? ほとんどのシナリオに適した openJPA ドキュメントに 20 などの DEFAULT 値がある場合はどうなりますか? または、実行時に変更することをお勧めします。

どんなコメントでも大歓迎です。ありがとう!

4

1 に答える 1

0

これは、実際には OpenJPA の質問というよりも MS-SQL のチューニングに関する質問です。FetchBatchSize の値がドライバーに渡されます。

最大結果数パラメーターに基づいて、実行時に値を動的に設定することは確かに問題ありません。また、 limit 句よりも大きい数を指定したときに発生した遅延が、構成のあいまいなビットによるものではないと仮定すると、OpenJPA SQLServerDictionary に何かを追加して、最大結果値が存在します。OpenJPA メーリング リストに取り上げるのもよいことかもしれません。

于 2011-07-15T23:32:59.950 に答える