Heim  >  Artikel  >  Datenbank  >  mysql数据库死锁_MySQL

mysql数据库死锁_MySQL

WBOY
WBOYOriginal
2016-06-01 12:58:36941Durchsuche

当我们频繁的对数据库进行插入或更新的时候,有可能会直接报sql错误1205:lock wait timeout exceeded。数据库的死锁。

一般INNODB数据库会自动添加事务,当进行插入或者更新的时候,如果上次commit尚未执行完,而又有一次新的commit提交的时候,系统就会报SQL错误1205:lock wait timeout exceeded。这就是mysql死锁。

作为一个新手,碰到这样苦逼的事情自然是手足无措。于是赶紧上网看看解决方案,不负所望,网上还真找到相应的结局方案,而且给了三种:

1 应急方案:简单暴力 show processlist;然后看是哪个进程引起的死锁,直接kill掉。

2 根治方案: select * from innodb_trx 查看是那些事务占据了资源(这个方案说到这里就没有然后了,查看完了呢?卧槽,也是不负责任)。

3 设置等待超时:innodb_lock_wait_timeout=50,autocommit=on. 设置等待超时这个方案看起来不错,但是仔细一样,你设置多少合适呢?万一每次更新上万条数据呢,慢的很怎么办?突然感觉可行性不高。第二种呢,根本没有讲完就算了。只能选择简单暴力第一种。

后来我咨询了一下数据库方面的大神,他给我推荐了一个方案:先禁用索引,再关闭,再关闭自动提交,再关闭数据库日志。然后他给我操作了一遍(当然我没学会),不过还真的好使,建议会用的可以试试。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn