Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1859634
  • 博文数量: 117
  • 博客积分: 2559
  • 博客等级: 少校
  • 技术积分: 4385
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-13 20:08
个人简介

作为初学者,要想取得进步,成为高手,首先应该了解自己的不足之处.

文章分类

全部博文(117)

文章存档

2014年(1)

2013年(25)

2012年(13)

2011年(77)

2010年(1)

分类: Mysql/postgreSQL

2013-01-31 14:07:25

参考<<高性能MySQL>>

  1. 概念
    死锁是指两个或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象.
    当多个事务以不同顺序试图加锁同一资源时,就会产生死锁.
    任何时间,多个事务同时加锁一个资源,一定产生死锁.
  2. INNODB引擎处理死锁的方式
    首先INNODB可以预知循环相关性,并立刻返回错误.其次INNODB处理死锁的方法是,回滚拥有最少排他行级锁的事务.(估算)
  3. 死锁现象
    数据冲突导致;
    存储引擎的工作方式导致.

问题分析

  1. 查看死锁信息
  2. 分析表结构
  3. 重写查询语句,查看执行计划

附:

死锁信息


登录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 ......

-- 第(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 ......

-- 第(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)个事务
...
阅读(2408) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~