mysql数据库死锁_MySQL

WBOY
リリース: 2016-06-01 12:58:36
オリジナル
972 人が閲覧しました

当我们频繁的对数据库进行插入或更新的时候,有可能会直接报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. 设置等待超时这个方案看起来不错,但是仔细一样,你设置多少合适呢?万一每次更新上万条数据呢,慢的很怎么办?突然感觉可行性不高。第二种呢,根本没有讲完就算了。只能选择简单暴力第一种。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート