一括挿入のパフォーマンスが向上することを期待して、Identity generator から Sequence に移行しました。JPA EntityManager の persist メソッドを使用してバッチ サイズ 50 で一括挿入を行っています。最大 300K のレコードを挿入しています。
エンティティ テーブルには、主キー列 - id の次の設定があります。
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="myseq")
@SequenceGenerator(name="myseq", sequenceName="my_table_id_seq", allocationSize = 1)
private Long id;
以前、allocationSize をデフォルトの 50 として使用し、このプロパティ「hibernate.id.new_generator_mappings」を使用したとき (true に設定)、次のような問題に遭遇しました。
したがって、allocationSize を 1 に変更しました。それ以来、上記の問題は見られませんでした。ただし、これは 50 の割り当てサイズほどパフォーマンスを向上させません。しかし、50 の割り当てサイズが原因で、新しい ID と既に存在する ID の間に非常識なギャップが生じます。