web-dev-qa-db-ja.com

hibernate.jdbc.fetch_sizeとhibernate.jdbc.batch_sizeの違いは何ですか?

私は自分のアプリケーションを調整しようとしていて、バッチフェッチとバッチ選択について話しているブログに出くわし、次のように私の理解を入れています。

  • hibernate.jdbc.fetch_size-選択クエリでフェッチされる行数を指定するために使用されます。
  • hibernate.jdbc.batch_size-1回のデータベースヒットで実行される挿入または更新の数を指定するために使用されます。

私の理解が正しいかどうか教えてください。また、上記のパラメータの最適値とは何ですか。

15
Bhargav Kumar R

これらのオプションはどちらも、JDBCドライバー内のプロパティを設定します。最初のケースでは、hibernate.jdbc.fetch_sizeは、JDBCドライバー内でのステートメントのフェッチサイズを設定します。これは、selectステートメントに複数の行の結果がある場合にフェッチされる行の数です。

2番目のケースでは、hibernate.jdbc.batch_sizeは、実行のために一度にデータベースに送信される更新(挿入、更新、削除)の数を決定します。このパラメーターはバッチ挿入を実行するために必要ですが、順序付けされた挿入パラメーターと、挿入をバッチ挿入ステートメントに書き換えるJDBCドライバーの機能と組み合わせる必要があります。

参照 このリンク

17
Trevor Gowing

あなたの仮定は正しいです。

hibernate.jdbc.fetch_size

hibernate.jdbc.fetch_size Hibernate構成プロパティは、JDBCの設定に使用されます Statement#setFetchSize 現在実行中の永続コンテキスト中にHibernateが使用するすべてのステートメントのプロパティ。

デフォルトでは問題ないため、通常、このプロパティを設定する必要はありません。特に、単一のデータベースラウンドトリップでResultSet全体をフェッチするMySQLおよびPostgreSQLの場合は特にそうです。 HibernateはResultSet全体をトラバースするため、複数のラウンドトリップを使用するよりも、1つのシュートですべての行をフェッチする方が適切です。

デフォルトのフェッチサイズは10なので、Oracleの場合にのみ設定することをお勧めします。詳細については、 この記事 を参照してください。

hibernate.jdbc.batch_size

hibernate.jdbc.batch_sizeプロパティは、複数のINSERT <UPDATE、およびDELETEステートメントをバッチ処理するために使用され、それらを1つのデータベース呼び出しで設定できます。

このプロパティを設定する場合は、次の2つも設定することをお勧めします。

  • hibernate.order_insertsからtrue
  • hibernate.order_updatesからtrue

詳細については、次の2つの記事をご覧ください。

8
Vlad Mihalcea

あなたの理解はかなり正しいようです。 HibernateのJBOSSドキュメントを参照します。次の章は バッチ処理 についてです。そして、これは トゥイーキングパフォーマンス です。

それは良い、読みやすいソースです。最適値についていくつかの提案がありますが、CodeChimpが述べたように、チューニングはケースバイケースで行うのが最善であり、時間の経過とともに繰り返し可能なプロセスです。

0
jvdp

フェッチサイズはStatement.setFetchSize()を実行しますが、バッチサイズはHibernateバッチ処理用です。両方の構成パラメーターについて説明します ここ 。休止状態のバッチについては、 ここ を参照してください

0
Saket