MySQL的锁

锁,是数据库区别于文件系统的一个关键特性。
锁机制用于管理对共享资源的并发访问。
锁在数据库中是为了解决并发问题的。
对共享空间来说,存在并发,并发就需要使用锁来实现并发控制。

Mutex和Latch锁:用来保护链。
情景:
A线程想把链中的某个数据从冷区放到热区。B线程想把某个数据给删除。如果没有锁的话,就会出现冲突。
对chain(链)的保护:

  • ①mutex锁:排他锁。适用于不经常出现并发的链,或者并发时间很短的。
  • ②latch锁:比mutex大点。r、rw。适用于经常出现并发访问的链,且并发时间比较长。

本人的另一篇笔记:latch的争用
http://blog.csdn.net/qq_18312025/article/details/78587334

1.引入
锁,是用来管理对共享文件的并发访问。

latch称为栓锁(轻量级的锁),因为其要求锁的时间非常短。

在innodb存储引擎中,又可以分为mutex(互斥量)和rwlock(读写锁)。其目的是用来保证并发线程操作临街资源的正确性,并且通常没有死锁检测的机制。

而lock锁的对象是事务,用来锁定数据库的对象,如表、页、行。并且一般lock的对象仅在事务commit或者rollback后释放(不同事务的隔离级别释放的时间可能不一样)。有死锁机制。

2.latch争用的过程
当一个线程持有latch时(也就是对这个链进行操作的时候),其他的线程得在一边看着。比如线程1持有latch,正在对freelist进行遍历,线程2也想进行遍历,是不可能的,所以现在线程2阻塞,只有两种选择,一是退出,二是等待,但如果等待就会占用cpu,如果想占用cpu就要有事可做,否则cpu’会把没事做的线程踢出去,所以线程2就会执行某段空代码来让自己忙起来(所以虽然线程2在等待,但cpu还是忙碌的)。

3.线程2的三种情况:

  • gets:去试试能不能获得latch锁;
  • misses:获取latch锁失败;
  • sleeps:去执行空代码让自己看起来忙了。

4.latch争用的现象:

  • 1.latch争用会表现为cpu繁忙;
  • 2.latch争用没有排队。

原因:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯言甚善

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值