冬眠するのが初めてです。以下のいずれかが間違っている場合は、私を修正してください。休止状態でのパフォーマンスの問題
ID生成にシーケンス生成器を使用しているエンティティがあります。このため、すべての挿入が1のシーケンスを取得するために2つのコールをしているとallocationsizeについての私の研究の間に挿入し
@Id
@SequenceGenerator(name="i_gen", sequenceName="b_seq", allocationSize=6)
@GeneratedValue(generator="i_gen")
private Long id;
を行うことは、他の私が割り当てサイズを指定するにはそれを理解し、我々は今後数allocatedsizeのためのDBを呼び出すことはありませんが、単純に1ずつ増加します。しかし、私はこの動作を見ません。私が間違っているなら、私を修正してください。
次は私が単一のトランザクションで挿入6つのオブジェクトの場合
[INFO ] [26082016.002159] sqltiming:357 - select b_seq.nextval from dual {executed in 69 msec}
[INFO ] [26082016.002200] sqltiming:357 - select b_seq.nextval from dual {executed in 174 msec}
[INFO ] [26082016.002200] sqltiming:357 - select b_seq.nextval from dual {executed in 74 msec}
[INFO ] [26082016.002200] sqltiming:357 - select b_seq.nextval from dual {executed in 77 msec}
[INFO ] [26082016.002200] sqltiming:357 - select b_seq.nextval from dual {executed in 78 msec}
[INFO ] [26082016.002200] sqltiming:357 - select b_seq.nextval from dual {executed in 161 msec}
を参照してくださいSQLのログです、私はNEXTVAL取得し、6つの挿入するDBへの6つのコールを参照してください。バッチインサートを使用してインサートを最適化しました。しかし、私はseqジェネレータの問題を回避することができません。私はこれのために巨大なパフォーマンスのヒットを参照してください。
seqnumberを取得するために非常に多くのdb呼び出しを行うことはできません。
構文は覚えていませんが、主キーのブロックをJVMに一括して事前割り当てしてから使用できます。 – farrellmr
期待通りです。他のJPAは、私が使用したのは、各挿入にシーケンスを呼び出さず、割り当てを使用してそれらをキャッシュするということです。私は通常、 '@ SequenceGenerator'がCLASSレベル(必須ではありません)で指定されることを期待し、' @ GeneratedValue'(より重要なもの)のstrategy = GenerationType.SEQUENCEを見てください。 –