Mysql性能调优与架构设计-5

本文介绍了Mysql InnoDB存储引擎中的锁机制,包括MVCC多版本并发控制与LBCC基于锁的并发控制两种隔离性解决方案。详细解释了独占锁、共享锁、意向锁等不同类型的锁以及它们的应用场景,并探讨了间隙锁的作用与死锁处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql中的锁

InnoDB解决隔离性的两种方式:

  1. MVCC 多版本并发控制,使用的是乐观锁的快照读
  2. LBCC 基于锁的并发控制,使用的是悲观锁的当前读
    同MVCC一样,LBCC使用的锁也是为了解决Mysql中的并发事务的问题。MVCC解决快照读的问题。

LBCC

锁的分类
  • 独占锁(x锁):select * from for update; update; delete;
  • 共享锁(s锁):select * from lock in share mode;
  • 意向锁(IX和IS表级锁):当事务在表内加行锁前,需要加上表级的意向锁。
锁的粒度

非InnoDB只有表锁,没有行锁。

  • 行锁:只有在使用索引的时候才会加行锁,并且只加在索引项上。
  • 表锁:S锁、X锁、IS锁、IX锁、元数据锁(DDL)、AUTO-INC锁(自增id中插入操作时)。

间隙锁(Gap Locks)

InnoDB会在加行锁的同时对相邻索引间加上间隙锁。配合MVCC防止幻读问题。

但是还是没有完全避免幻读
比如:一个事务两次加锁的当前读是可以避免幻读问题,但是如果该事务第一次没有加锁成功(即没有命中数据),则还是有可能发生幻读。

死锁

两个或者两个以上的事务,竞争资源,造成的阻塞现象。Mysql强制重启事务来解决死锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值