首页 > SQL数据库管理 > [HowTo]-死锁

[HowTo]-死锁

2014年10月21日

[HowTo]-死锁
http://blog.chinaunix.net/uid-16844903-id-3484675.html
参考<<高性能MySQL>>
概念
死锁是指两个或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象.
当多个事务以不同顺序试图加锁同一资源时,就会产生死锁.
任何时间,多个事务同时加锁一个资源,一定产生死锁.
INNODB引擎处理死锁的方式
首先INNODB可以预知循环相关性,并立刻返回错误.其次INNODB处理死锁的方法是,回滚拥有最少排他行级锁的事务.(估算)
死锁现象
数据冲突导致;
存储引擎的工作方式导致.
问题分析
查看死锁信息
分析表结构
重写查询语句,查看执行计划
附:
死锁信息

登录MySQL执行SHOW ENGINE INNODB STATUS\G命令


LATEST DETECTED DEADLOCK
————————
121029 14:46:44
— 死锁发生的时间

*** (1) TRANSACTION:
TRANSACTION 1B02B0FAC, ACTIVE 5 sec fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 86 lock struct(s), heap size 14776, 11642 row lock(s), undo log entries 1436
MySQL thread id 51989134, OS thread handle 0x6482b940, query id 37321665747 ……
<sql-1>
— 第(1)个事务信息

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 17689 page no 1606 n bits 760 ……
lock_mode X waiting
— 第(1)个事务等待的锁

*** (2) TRANSACTION:
TRANSACTION 1B02B2776, ACTIVE 0 sec fetching rows, thread declared inside InnoDB 500
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1248, 11 row lock(s)
MySQL thread id 51984598, OS thread handle 0x6d9a8940, query id 37321665253 ……
<sql-2>
— 第(2)个事务状态

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 17689 page no 1606 n bits 760 index ……
— 第(2)个事务持有的锁:该锁就是第(1)个事务在等待的.

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 17689 page no 1606 n bits 760 index ……
— 第(2)个事务等待的锁.

*** WE ROLL BACK TRANSACTION (2)
— 回滚了第(2)个事务

分类: SQL数据库管理 标签: ,
本文的评论功能被关闭了.