优化不同操作的MySQL批处理

时间:2019-04-08 14:19:45

标签: mysql optimization spring-jdbc

背景

我正在研究一种data sync tool,它可以监听数据库中的更改,操纵这些更改并将其发送到另一个目标数据库。

当我在MySQL上进行性能测试时,遇到了一些问题。

问题

现在我正在使用Spring JdbcTemplate#batchUpdate将一批数据更改发送到MySQL。

String[] sqlStatement = new String[]{"insert ...;", "update ...;", "delete ...;"};
jdbcTemplate.batchUpdate(sqlStatement)

这种批处理包含对不同表的不同类型的操作(insertupdatedelete)。因此,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; ?:在同一笔交易中完成整个批次可能会有所帮助,但可能会带来一些副作用,因此我们对此选项非常谨慎。

1 个答案:

答案 0 :(得分:0)

哪个版本的MySQL?如果为5.7,则可能是解决方案:Query Rewrite。另请参见5.7 manual