mysqlinnodbupdate批量更新,Mysql⼤批量并发更新
数据更新或新增后数据经常⾃动回滚,造成mysql死锁。
本次遇到这个情况,主要是每天有20w条Update,需要在8个⼩时内完成,⽤的是python Mysqldb
⽬前是多线程,结果并发量过⼤,造成各种问题。记⼏个关键:
⼀、优化sql语句
能insert,尽量别update;
⼤量update,最好使⽤executemany,⽽不是execute;
executemany,⼀次可提交多条数据,那么使⽤线程,等待线程结束后⼀起提交,减少update数量;
不过这个过程时间要⽐execute长,于是产⽣了lock time问题。
⼆、优化mysql性能
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1、锁等待超时。
是当前事务在等待其它事务释放锁资源造成的。可以出锁资源竞争的表和语句,优化你的SQL,创建索引等,如果还是不⾏,可以适当减少并发线程数。
2、innodb_lock_wait_timeout是Innodb放弃⾏级锁的超时时间
设置⽅法参考:
mysql> set innodb_lock_wait_timeout=900;
Query OK, 0 rows affected (0.00 sec)
批量更新sql语句mysql> select @@innodb_lock_wait_timeout;
+----------------------------+
| @@innodb_lock_wait_timeout |
+----------------------------+
| 900 |
+----------------------------+
1 row in set (0.00 sec)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。