前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL|锁操作的本质

MySQL|锁操作的本质

作者头像
heidsoft
发布2022-03-14 19:29:02
5010
发布2022-03-14 19:29:02
举报
文章被收录于专栏:云计算与大数据

锁操作,所起的作用就是防止被锁的对象被并发操作同时修改。

加锁操作就是为特定对象设置一个标志位,然后通过使用锁机制(对象上存在标志位则不能改写,放弃加锁请求或等待锁释放后再进行操作)和释放锁(取消特定对象上被设置的标志位)

锁的本质,是保护共享资源不被兵法修改破坏(原子操作不需要锁)

锁的另外一层含义,是抑制并发。保护共享资源即在抑制并发,抑制并发的另外一部分含义,常用在多个锁同时施加的情况。

全局锁表

- 元数据锁表

- 行级别锁表

mysql server MDL_map m_locks 用于处理DDL之间的并发,处理DDL和DML之间的并发,并发冲突的根源在于元数据的竞争。

innodb提供全局行级锁表(lock_sys_t),用以记录innodb系统运行期间所有行级锁的施加情况,并发冲突的根源在于对表中数据的竞争。

行级锁包括记录锁,谓词锁,谓词页锁,全局级锁表中存放到了不同的Hash表里

封锁系统架构

InnoDB 的写锁三种粒度

enum rw_lock_type_t {

RW S LATCH = 1 ,   共享 

RW X LATCH = 2 ,   排它 

RW SX LATCH = 4,   意向排它  阻塞写操作 不阻塞 操作

RW NO LATCH = 8   没有 

}

lnnoDB 定义的Mutex

InnoDB 在ibOmutex.h 文件中定义了六种自定义的Mutex :

OSBasicMutex: OS 的Event 定义的Mutex  依赖于具体的OS施加锁只尝一次。

如下面的初始化代码段等。

OSTrackMutex   继承 OSB as icMutex  依赖于OS 施加锁尝函数参数指定的次数(max_spins 参数指定尝试的次数)

TTASFutexMutex  利用OS 的CAS 原子指令实现的施加尝试  利用TAS 实现解锁尝试,用于Linux 的Futex 机制。

【Futex是Fast Userspace rnuTexes的缩写,Linux 2.5.7支持。Futex是用户态与内核态混合的同步机制 同步的进程间通过mmap共享一段内存  futex变量位于这段共享的内存中且操作是原子的。】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云数智圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档