私は自分のアプリケーションを調整しようとしていて、バッチフェッチとバッチ選択について話しているブログに出くわし、次のように私の理解を入れています。
hibernate.jdbc.fetch_size
-選択クエリでフェッチされる行数を指定するために使用されます。hibernate.jdbc.batch_size
-1回のデータベースヒットで実行される挿入または更新の数を指定するために使用されます。私の理解が正しいかどうか教えてください。また、上記のパラメータの最適値とは何ですか。
これらのオプションはどちらも、JDBCドライバー内のプロパティを設定します。最初のケースでは、hibernate.jdbc.fetch_size
は、JDBCドライバー内でのステートメントのフェッチサイズを設定します。これは、selectステートメントに複数の行の結果がある場合にフェッチされる行の数です。
2番目のケースでは、hibernate.jdbc.batch_size
は、実行のために一度にデータベースに送信される更新(挿入、更新、削除)の数を決定します。このパラメーターはバッチ挿入を実行するために必要ですが、順序付けされた挿入パラメーターと、挿入をバッチ挿入ステートメントに書き換えるJDBCドライバーの機能と組み合わせる必要があります。
参照 このリンク
あなたの仮定は正しいです。
hibernate.jdbc.fetch_size
Hibernate構成プロパティは、JDBCの設定に使用されます Statement#setFetchSize
現在実行中の永続コンテキスト中にHibernateが使用するすべてのステートメントのプロパティ。
デフォルトでは問題ないため、通常、このプロパティを設定する必要はありません。特に、単一のデータベースラウンドトリップでResultSet
全体をフェッチするMySQLおよびPostgreSQLの場合は特にそうです。 HibernateはResultSet
全体をトラバースするため、複数のラウンドトリップを使用するよりも、1つのシュートですべての行をフェッチする方が適切です。
デフォルトのフェッチサイズは10なので、Oracleの場合にのみ設定することをお勧めします。詳細については、 この記事 を参照してください。
hibernate.jdbc.batch_size
プロパティは、複数のINSERT <UPDATE、およびDELETEステートメントをバッチ処理するために使用され、それらを1つのデータベース呼び出しで設定できます。
このプロパティを設定する場合は、次の2つも設定することをお勧めします。
hibernate.order_inserts
からtrue
hibernate.order_updates
からtrue
詳細については、次の2つの記事をご覧ください。
あなたの理解はかなり正しいようです。 HibernateのJBOSSドキュメントを参照します。次の章は バッチ処理 についてです。そして、これは トゥイーキングパフォーマンス です。
それは良い、読みやすいソースです。最適値についていくつかの提案がありますが、CodeChimpが述べたように、チューニングはケースバイケースで行うのが最善であり、時間の経過とともに繰り返し可能なプロセスです。