OracleからSQLServerデータベースへデータを移行しようとしています。私は現在、JDBCCursorItemReaderを使用してOracleデータを読み取り、次にJDBCBatchItemWriterを使用してSQL Serverにデータを書き込みます。SpringバッチSQLマージが長すぎます
私の問題は、これが長すぎます。約200,000行のテーブルの場合、それは約1時間かかります(そして、これらのクエリのうち、それぞれ200K行のうちの4つを実行する必要があります)。
@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ブラウザで直接実行されるまでに、どのくらい時間がかかりますか?さらに、自動コミットをfalseに設定しましたか?あなたのステップのコミットは何ですか?一般的に、毎秒数千ものエントリを読み書きすることができます。 –