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 锁时无法正常获取,那就可能真的会“锁表了”。

             

  • 相关阅读:
    python开发初识函数:函数定义,返回值,参数
    py基础2--列表,元祖,字典,集合,文件
    python中的urlencode与urldecode
    使用pymysql进行mysql数据库操作
    docker 命令
    docker镜象
    docker的安装
    JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)
    linux远程复制和压缩文件的命令
    rosbag 初尝试
  • 原文地址:https://www.cnblogs.com/zhonghuahero/p/14441076.html
Copyright © 2011-2022 走看看