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

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

发布网友 发布时间:2小时前

我来回答

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
减罪的读音减罪的读音是什么 减的拼音? 减的反义词 5种开红色花朵的植物有哪些 怎么查衣服是什么牌子 ...一件连衣裙就要1080元 ,你怎么看?_百度知 ... ...的衣服比较难?这些时尚的淘宝店铺你知道吗?_百度知 ... 比尔布莱森被人们称为什么 三星空气净化器怎么样 ? 三星ax7000空气净化器 每月只还信用卡的最低还款额度,会怎么样? 英语好句子摘抄100句 励志英语句子摘抄 英语经典名著好句摘抄 英语优美句子摘抄 ASTMA193 B8是什么材料? ASTMA193B8属于什么材质? ASTM A193 B8是什么材料? 先前公司说不买社保我个人买了过后公司又给买了我买的能退吗? 公司不帮员工买社保,但是自己申请买社保自己出钱买但不满两个月会作废... 《酸梅汤》饮品配方制作方法 最简单的酸梅汤做法 趣味谜语有关牛的趣味谜语简单一点 有什么观察方法 列举三种观察方法 为什么人体的体温在37摄氏度最适宜? 为何人类的体温是37度? 郝志亮是什么人? 杀生丸不会是二吧? 法院受理劳动争议的范围是哪些 人民法院应当受理的劳动争议案件包括哪些 2200配一台台式的电脑怎么配··急急谢谢 大脚电脑怎么设置游戏角色魔兽世界大脚怎么绑定角色啊 5320怎么玩n_g游戏啊! ...再返回游戏有声音但是黑屏怎么解决啊在线等 ...DB Provider for ODBC Drivers 错误 '80004005' 在线等 Do都城地址在哪里? 儿童职业体验中心儿童职业体验中心 清远社保个人缴费怎么查询 你见过最可怕的催债方式是什么? 换微信了,想把原来微信里的钱转到新微信号里? 原本被封的微信微信里钱包的钱怎样转到新微信上 梦见蜘蛛网和蜘蛛预示着什么 屏幕进水是怎么回事? 萝卜大爱林邑,最美郴州,作文获奖者 大爱林邑 最美郴州作文600字 大爱林邑最美郴州作文500字小学ǔ 打游戏需要多少的宽带 游戏需要多少上行带宽 电脑制作ppt怎么在手机上播放? 学冶金工程的就业待遇和环境怎样 冶金工程的就业前景如何?