mysql 批量执行update语句最佳方案思考

最近运维问了我一个问题,mysql批量执行一万多条update,如何做才能把风险和损失做到最低?

这个问题,我没有直接回答,因为我也没有类似的经历。于是搜集资料得出结论如下。


mysql 默认是autocommit=on也就是默认开启自动提交事务。这种情况下,一条sql就会开启一个事务,这时候同时执行一万条update,就会导致实际开启一万个事务,然后挨个执行,挨个开启,挨个提交。

缺点:同时锁住数据较少,但是数据库资源占用严重,对外提供操作性能急剧下降。


当autocommit=off时,同时执行一万条update,那么只会开启一个事务,等到所有都update后,一并commit。
缺点:同时锁住数据较多,外面的select进不来,大量连接等待获取行锁,同样影响数据库对外服务能力。


最终优化方案:建议,把autocommit设置off,然后执行update的时候,手动分批commit,分批条数限制100,或者200,比如一万条update,按照每100条 就commit一次,10000个update总共需要100个事务,每次锁住100条数据。性能将会得到很大提升。

当然,选择多少条手动commit,这个需要根据各自业务实际情况而定。

相关测试数据,正在验证ing!~~如有理解不当的地方,也欢迎各位给出宝贵建议和指点!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页