+ -
当前位置:首页 → 问答吧 → 删除数据引发ERROR 1213 (40001) at line 7: Deadlock found when trying

删除数据引发ERROR 1213 (40001) at line 7: Deadlock found when trying

时间:2011-08-27

来源:互联网

3抬在线高并发主机系统全部linux  a b c
c 为数据库服务器(mysql 5.0.45)。  a b 为web服务器.
c 做一个500万表的存储过程删除旧数据的时候,有时候会引发
( 用存储过程删除大表 。循环 每次1万条提交)ERROR 1213 (40001) at line 7: Deadlock found when trying 、

大致原因是c 做该表删除的时候,a b 同时还是每秒都在插入批数据到c 表中, 该表为innodb 引擎 无pk.
索引少.  推测是删除每次1万条的时候,innodb的默认cluster引擎数据数据指针移位 与插入的新数据有冲突.行锁冲突
每秒这个表新增数据从几十到几百.(我删除的时候是负载最低时候 每秒不到200条新增)

在测试机器基本上几个月看不到1次,在线
有2台在线服务器其中1台压力很大的机器(8g)的半个月可以看到1次这个ERROR 1213 (40001) at line 7: Deadlock found when trying 、
另外1台压力小机器(12g)半年看不到1次.

提交记录数据从10万参考io 降到1万, 但是偶尔还是能发现ERROR 1213 (40001) at line 7: Deadlock found when trying 、
整个删除机制能用但总是不能断ERROR 1213 (40001) at line 7: Deadlock found when trying?  

不知道有没有更好的方法来除掉这个Deadlock ?

[ 本帖最后由 liyihongcug 于 2011-8-27 17:10 编辑 ]

作者: liyihongcug   发布时间: 2011-08-27

该表为innodb 引擎 无pk............先给此表增加一个自增序列,5.0.45有了自增序列在做INSERT的时候有可能稍微慢一点,跟AUTO-INCREMENT全局锁释放机制有关系


若非一直大规模插入,不会出现性能瓶颈

存过过程,根据主键去删除C表的数据....不要1W一条提交一次,事务越大,越容易造成死锁的发生,为此,建议100条DELETE提交一次....

作者: jinguanding   发布时间: 2011-08-27