zoukankan      html  css  js  c++  java
  • MySQL5.7之在线DDL不会锁表

    MySQL5.7在线修改varchar字段不在锁表,测试过程如下:

        mysql> select version();
        +------------+
        | version() |
        +------------+
        | 5.7.18-log |
        +------------+
    
        mysql> select count(*) from T_USER_INFO;
        +----------+
        | count(*) |
        +----------+
        | 7147528 |
        +----------+
    
    

    打开两个命令行窗口:
    窗口一:

    mysql> alter table T_USER_INFO modify column USER_NAME varchar(100);
    

    窗口二:

    mysql> delete from T_USER_INFO where user_name='rz19930119';
    

    先执行第一个窗口命令,再执行第二个窗口命令,第二个delete语句很快执行完,第一个修改语句执行了6分钟。
    总结:MySQL5.7以上的版本,online DDL不会锁表。

    原理:
    MySQL5.7以上的版本中,在执行创建或者删除的操作同时,将DML操作日志写入一个缓存中。待修改完成之后再重做到原表上,以保住数据的一致性。这个缓存大小由innodb_online_alter_log_max_size控制,默认为128MB,若用户更改表比较频繁,在线DML业务压力较大,则innodb_online_alter_log_max_size空间不能存放日志,会抛出错误,此时可以调大innodb_online_alter_log_max_size获得更多日志缓存空间解决问题 。

  • 相关阅读:
    软件测试面试题及答案【史上最全】
    Loadrunner参数(摘)
    Linux系统的目录结构
    关于梦想(七)
    Mysql基于Linux上的安装
    走进MySQL
    关于梦想(六)
    Jmeter的实例应用
    十种社会中最真实的人际关系
    有些人走了就走了,该在的还在就好
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12697930.html
Copyright © 2011-2022 走看看