我正在研究一种data sync tool,它可以监听数据库中的更改,操纵这些更改并将其发送到另一个目标数据库。
当我在MySQL上进行性能测试时,遇到了一些问题。
现在我正在使用Spring JdbcTemplate#batchUpdate
将一批数据更改发送到MySQL。
String[] sqlStatement = new String[]{"insert ...;", "update ...;", "delete ...;"};
jdbcTemplate.batchUpdate(sqlStatement)
这种批处理包含对不同表的不同类型的操作(insert
,update
,delete
)。因此,rewriteBatchedStatements=true
选项不是那么有用(尽管我添加了此选项,但看不到任何提升)。
现在平均插入速度约为1300 / s(不过,Elasticsearch可以达到10000或更高。以下是一些测试结果)。
time: 20190407-022652
src=800000
dst=9302
time: 20190407-022654
src=800000
dst=12070
time: 20190407-022656
src=800000
dst=14863
time: 20190407-022658
src=800000
dst=17536
那么有什么建议可以优化这种批次?
autocommit=0;
和commit;
?:在同一笔交易中完成整个批次可能会有所帮助,但可能会带来一些副作用,因此我们对此选项非常谨慎。