我正在嘗試將數據從Oracle遷移到SQLServer數據庫。我目前使用JDBCCursorItemReader讀取Oracle數據,然後使用JDBCBatchItemWriter將數據寫入SQLserver。彈簧批量SQL合併時間太長
我的問題是,這是服用了太多的時間。對於大約200,000行的表,它需要將近一個小時(並且我必須運行這些查詢中的四個,每個行大約有200K)。
@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?你的步驟的提交大小是多少?通常,您應該能夠每秒讀取和寫入幾千條條目。 –