zoukankan      html  css  js  c++  java
  • mysql online ddl

    背景:业务高峰期,在线操作ddl,比如订单表增加字段

    担心:锁表,造成业务阻塞

    期望:寻求一种解决方案,ddl不影响dml

    调研:搜索 :mysql 增加字段如何不锁表

             https://www.zhihu.com/question/26457943-》https://c4ys.com/archives/1943-》https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html

             搜索:MDLS 是什么-》https://segmentfault.com/a/1190000021212804

             搜索:mysql ddl 不锁表 算法含义 -》http://georgema.xyz/2020/11/18/online-ddl/

    MDL 锁是在 Server 层加的之外,其它三种都是在 InnoDB 层加的。具体的加锁逻辑不在此进行展开,但是需要明确一点:所有的操作(不管是 DDL 还是 DML 还是查询语句)都需要先拿 Server 层的 MDL 锁,然后再去拿 InnoDB 层的某个需要的锁。一个 DDL 的基本过程是这样的:

    1. 首选,在开始进行 DDL 时,需要拿到对应表的 MDL X 锁,然后进行一系列的准备工作;(需要等待慢查询和写事务)
    2. 然后将 MDL X 锁降级为 MDL S 锁,进行真正的 DDL 操作;(阻塞写事务作)
    3. 最后再次将 MDL S 锁升级为 MDL X 锁,完成 DDL 操作,释放 MDL 锁;(阻塞所有事务)

    所以在真正执行 DDL 操作期间,确实是不会“锁表”的,但是如果在第一阶段拿 MDL X 锁时无法正常获取,那就可能真的会“锁表了”。

             

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/zhonghuahero/p/14441076.html
Copyright © 2011-2022 走看看