MySQL latch

一、latch

1.1 latch介绍

  latch 称为闩锁,只作用于内存数据结构,latch 是轻量级的锁,线程通常只在临界区内读写共享内存数据结构时持有 latch,因此 latch 的锁定时间一般很短并且频繁使用,latch 的获取和释放需要尽量小的消耗和更好的性能。在Innodb存储引擎中,latch又可以分为mutex(互斥量)和RW-Lock(读写锁)。
innodb使用show engine innodb mutex进行查看latch

  • mutex:互斥量;有时候有些资源需要共享和并发,但是又不是分频繁,所以向操作系统申请一个mutex,mutex都是排他的。
  • rw-latch: 读写锁

1.2 latch相关特点

1.2.1 latch争用过程
  • a 以x锁访问链表
  • b 排队等待x锁,占了cpu,但是cpu发现在等待,所以cpu将b踢出
  • a很快会释放锁,所以b不去排队,这时会去spin,空转cpu,然后再去看一下内存数据结构,a是否已解锁
  • b转了一圈后,在b spin的时间段的时间中,c进来了,连续多次的spin后, 产生了os waits
  • 操作系统将b从cpu中踢出
1.2.2 mutex锁的持有过程
  • a线程持有想mutex内存数据结构中写一个1
  • b线程看到内存数据结构有数字, 那么就去spin
1.2.3 latch锁特点

1、不排队
2、spin
3、os waits
4、cpu繁忙

1.2.4 监控指标
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 0
OS WAIT ARRAY INFO: signal count 0
RW-shared spins 0, rounds 0, OS waits 0
RW-excl spins 0, rounds 0, OS waits 0
RW-sx spins 0, rounds 0, OS waits 0
Spin rounds per wait: 0.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx
rounds的意思是每次询问旋转的参数
os waits:表示sleep,当突然增长比较快的时候,说明latch争用比较严重
rw-shared spin 的次数
rw-excl  spin的次数
1.2.5 latch争用发生的原因

1、内存访问太频繁(不停地找)
2、list链太长(链上挂10000个快,被持有的几率太大)
所以有时候会增加instance的数量,把大pool切成小的pool,让list链变短,降低争用

1.2.6 如何降低latch争用

1、优化sql,降低对内存读的数量,效果比较明显
2、增加instances的数量

1.2.7 如何准确发现解决latch

1、show engine Innodb mutex
2、查看什么类型的latch
3、定位sql

二、latch与lock区别

  lock 用于隔离多个事务,锁定的对象是数据库逻辑内容,例如 table、record、B-tree keys、key range 等,通常锁定时间很长,在事务结束时才释放。lock 会参与死锁检测,也支持复杂的调度策略,例如使用队列来排队加锁请求,因此 lock 申请和释放是比较耗时的,通常要上千的 CPU 周期。数据库系统通常会实现 lock table,因为 lock table 是共享的内存数据结构并且会有多个线程并发访问,因此访问 lock table 也就需要 latch 来保护。

  latch 可以直接嵌入要保护的数据结构,例如,对于内存池中的磁盘数据页,每个数据页都有一个内存描述符结构记录 page id 等信息,而数据页对应的 latch 就可以嵌入到这个描述符结构中。 lock 用于保护逻辑的数据库内容,被保护的数据可能都不在内存里出现,因此 lock 也就无法像 latch 一样嵌入要保护的对象。

  • lock事务 transaction 并发访问数据内容时的并发控制;
  • latch线程 thread 并发访问内存数据结构时的并发控制;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_梓杰_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值