Пока выполняется jdbcTemplate.batchUpdate(...), я вижу, что количество строк в db увеличивается постепенно (путем запуска count (*) в таблице), изначально 2k, затем 3k и до 10k. 2k и 3k не являются точными числами, иногда я получаю 2357, а затем 4567.
Я ожидал, что 10 k строк (размер партии) будут зафиксированы за один снимок. В моем понимании, если изначально я получаю число строк 0, то следующее количество строк должно быть 10k. Я не хочу, чтобы одна за другой вставляла по соображениям производительности, почему использование функции batchupdate и, похоже, также не делает все за один снимок.
Я хочу отправить данные (строки 10k) на сервер DB только один раз для моего batchsize. для этого есть что-нибудь, что я должен указать в конфигурации?
Ниже приводится способ публикации пакетного обновления jdbcTemplate. batchsize - 10k.
public void insertRows(...) {
...
jdbcTemplate.batchUpdate(query, new BatchPreparedStatementSetter(){
@Override public void
setValues(PreparedStatement ps, int i) throws SQLException {
...
}
@Override public int getBatchSize() {
if(data == null){
return 0;
}
return data.size();
}
});
}
Изменить: Добавлено @Transactional в метод isertRows stiil, я вижу такое же поведение. используя Transnational, он фиксируется после строк 10k, но когда я вижу счет, используя UR (выберите count (*) из mytable с ur), он показывает, что данные обновляются постепенно (2k 4k и далее до 10k). Это означает, что данные поступают на сервер в кусках (возможно, один за другим). Как я могу отправить все за один выстрел. Этот вопрос предполагает, что он достигается с помощью rewriteBatchedStatements в mysql, есть ли что-то подобное в DB2, а также.
Я использую реализацию DataSource com.ibm.db2.jcc.DB2BaseDataSource