【发布时间】:2017-01-24 22:31:50
【问题描述】:
我正在尝试将数据从 Oracle 迁移到 SQLServer 数据库。我目前正在使用 JDBCCursorItemReader 读取 Oracle 数据,然后使用 JDBCBatchItemWriter 将数据写入 SQLserver。
我的问题是这花费的时间太长了。对于约 200,000 行的表,它需要将近一个小时(我必须运行其中四个查询,每个查询大约 200,000 行)。
@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;
}
有没有人有任何提高这类工作表现的技巧?
【问题讨论】:
-
这看起来绝对像一个数据库问题。如果直接在 sql/db 浏览器中运行 Select-Query 需要多长时间才能返回?此外,您是否将自动提交设置为 false?您的步骤中的 commitSize 是多少?通常,您应该能够每秒读取和写入数千个条目。
标签: sql-server spring oracle spring-boot spring-batch