Я пытаюсь перенести данные из базы данных Oracle в SQLServer. В настоящее время я использую JDBCCursorItemReader для чтения данных Oracle, а затем JDBCBatchItemWriter для записи данных на SQL-сервер.Весенний пакетный слияние SQL слишком длинный
Моя проблема заключается в том, что это слишком долго. Для таблицы из 200 000 строк требуется почти час (и я должен выполнить четыре из этих запросов, каждый около 200 тыс. Строк).
@Bean
public JdbcCursorItemReader<DataPOJO> dataReader() throws Exception, ParseException, UnexpectedInputException {
final JdbcCursorItemReader<DataPOJO> dataReader= new JdbcCursorItemReader<>();
dataReader.setDataSource(oracleDataSource);
dataReader.setSql(Constants.DATA_QUERY);
dataReader.setRowMapper(new BeanPropertyRowMapper<DataPOJO>(DataPOJO.class));
return dataReader;
}
@Bean
public JdbcBatchItemWriter<DataPOJO> dataWriter() throws UnexpectedInputException, ParseException, Exception {
JdbcBatchItemWriter<DataPOJO> dataWriter = new JdbcBatchItemWriter<>();
dataWriter.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<DataPOJO>());
dataWriter.setSql(Constants.DATA_MERGE);
dataWriter.setDataSource(mssDataSource);
return dataWriter;
}
Есть ли у кого-нибудь советы по улучшению производительности на этих видах работ?
Это выглядит определенно как проблема с db. Сколько времени займет запрос Select-Query, если вы запустили его непосредственно в браузере sql/db? Кроме того, вы установили autoocommit в false? Что такое commitSize вашего шага? Как правило, вы должны иметь возможность читать и писать пару тысяч записей в секунду. –