问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL 深潜 - MDL 锁的实现与获取机制

发布网友 发布时间:2024-12-02 10:17

我来回答

1个回答

热心网友 时间:2024-12-02 12:55

为了满足数据库在并发请求下的事务隔离性和一致性要求,同时针对 MySQL 插件式多种存储引擎都能发挥作用,MySQL 在 Server 层实现了 Metadata Locking(MDL)机制。MDL 机制采用键值对方式描述对象,并通过灵活定制锁的对象、类型以及优先级,以及动态调整锁类型的兼容性,极大方便了数据库对各种查询请求进行合理的并发控制。

MDL 系统包含多个关键数据结构,如 MDL_key、enum_mdl_type、MDL_request、MDL_lock、MDL_ticket 和 MDL_context。MDL_key 通过字符串形式描述锁的对象,包含 namespace、类型名称和对象名称。enum_mdl_type 则定义了不同类型的锁,如范围锁和对象锁,用于控制不同查询语句的并发访问。

MDL 获取过程首先在 parse 阶段由 LEX 和 YACC 根据语句类型初始化 MDL 锁请求。然后,通过 open_tables_for_query 函数将所有需要访问的表打开,并获取 MDL 锁。在 MDL_context::try_acquire_lock_impl 函数中,系统首先检查线程已持有的相同对象的 MDL_ticket,优先使用 fast path 方式获取锁。对于 obtrusive 类型的 MDL 请求,需通过 slow path 方式遍历 m_granted 链表和其他 bitmap 来判断是否存在锁冲突。锁获取失败时,线程将加入锁等待队列,直到其他线程释放锁。

死锁检测在锁等待之前进行,确保线程不会陷入等待循环。通过 MDL_wait_for_subgraph 和 Deadlock_detection_visitor 实现死锁检测,首先广度优先搜索,然后深度优先搜索,确定是否存在死锁并选择受害者线程释放锁。监控 MDL 锁的获取情况可通过 MySQL performance_schema 实现,查看 performance_schema.metadata_locks 表。

PolarDB 在 MDL 上的优化引入了分区级别的 MDL 锁,使得 DML 和 DDL 获取的锁粒度降低到分区级,提高了并发度,实现了“在线”分区维护功能。用户可以自由进行分区维护而不影响分区表业务流量,大大增强了分区表使用的灵活性。

MDL 系统和相关优化为 MySQL 提供了强大的并发控制能力,确保了数据库在高并发环境下的性能和稳定性。通过合理利用 MDL 系统,开发者和数据库管理员可以有效管理并发请求,提高系统性能。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
网络宣传文案心碎,句句获赞! 关于朋友圈上万人点赞转发的说说 人生看的很透彻的经典句子 超现实超扎心的说说大全2019最新 心脏血管堵塞吃什么食物 投资理财有什么前景 pp理财什么情况 P2P理财行业的前景如何? 中国目前的财富管理现状是什么情况? 呼吸皮沙发寿命多久 “皮沙发的呼吸寿命” 呼吸皮沙发寿命多久 每月只还信用卡的最低还款额度,会怎么样? 英语好句子摘抄100句 励志英语句子摘抄 英语经典名著好句摘抄 英语优美句子摘抄 ASTMA193 B8是什么材料? ASTMA193B8属于什么材质? ASTM A193 B8是什么材料? 先前公司说不买社保我个人买了过后公司又给买了我买的能退吗? 公司不帮员工买社保,但是自己申请买社保自己出钱买但不满两个月会作废... 《酸梅汤》饮品配方制作方法 最简单的酸梅汤做法 趣味谜语有关牛的趣味谜语简单一点 有什么观察方法 列举三种观察方法 为什么人体的体温在37摄氏度最适宜? 为何人类的体温是37度? 郝志亮是什么人? 杀生丸不会是二吧? 法院受理劳动争议的范围是哪些 人民法院应当受理的劳动争议案件包括哪些 2200配一台台式的电脑怎么配··急急谢谢 大脚电脑怎么设置游戏角色魔兽世界大脚怎么绑定角色啊 5320怎么玩n_g游戏啊! ...再返回游戏有声音但是黑屏怎么解决啊在线等 ...DB Provider for ODBC Drivers 错误 '80004005' 在线等 Do都城地址在哪里? 儿童职业体验中心儿童职业体验中心 清远社保个人缴费怎么查询 你见过最可怕的催债方式是什么? 换微信了,想把原来微信里的钱转到新微信号里? 原本被封的微信微信里钱包的钱怎样转到新微信上 梦见蜘蛛网和蜘蛛预示着什么 屏幕进水是怎么回事? 萝卜大爱林邑,最美郴州,作文获奖者 大爱林邑 最美郴州作文600字 大爱林邑最美郴州作文500字小学ǔ 打游戏需要多少的宽带 游戏需要多少上行带宽 电脑制作ppt怎么在手机上播放? 学冶金工程的就业待遇和环境怎样 冶金工程的就业前景如何?