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获得更多日志缓存空间解决问题 。

posted @   哈喽哈喽111111  阅读(2499)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示