mysql加锁处理分析_18 MySQL加锁处理分析

http://hedengcheng.com/?p=844 by何登成(这篇博客提到了一个无比微妙的死锁情况,涉及InnoDB死锁预防。)

这篇文章从一个简单的SQL语句delete from t1 where id = 10;,分析在各种情况下的加锁情况。以下为这篇文章的目录,感谢何博士的分享。

1    背景    1

1.1    MVCC:Snapshot Read vs Current Read    2

1.2    Cluster Index:聚簇索引    3

1.3    2PL:Two-Phase Locking    3

1.4    Isolation Level    4

2    一条简单SQL的加锁实现分析    5

2.1    组合一:id主键+RC    6记录X锁

2.2    组合二:id唯一索引+RC    6唯一索引X锁+对应记录X锁

2.3    组合三:id非唯一索引+RC    7多个(索引X锁+对应记录X锁)

2.4    组合四:id无索引+RC    8全记录X锁

2.5    组合五:id主键+RR    9记录X锁

2.6    组合六:id唯一索引+RR    9唯一索引X锁+对应记录X锁

2.7    组合七:id非唯一索引+RR    9多个(索引X锁+对应记录X锁)+多个索引Gap锁

2.8    组合八:id无索引+RR    11   全纪录X锁,全Gap锁

2.9    组合九:Serializable    12MVCC降级为Lock-based并发控制

3    一条复杂的SQL    12

4    死锁原理与分析    14

5    总结    16

总结部分:

1、了解数据库的一些基本理论知识:数据的存储格式 (堆组织表 vs 聚簇索引表);并发控制协议 (MVCC vs Lock-Based CC);Two-Phase Locking;数据库的隔离级别定义 (Isolation Level); 2、了解SQL本身的执行计划 (主键扫描 vs 唯一键扫描 vs 范围扫描 vs 全表扫描); 3、了解数据库本身的一些实现细节 (过滤条件提取;Index Condition Pushdown;Semi-Consistent Read); 4、了解死锁产生的原因及分析的方法 (加锁顺序不一致;分析每个SQL的加锁顺序)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值