MySQL5.7新特性之在线DDL不会锁表
MySQL5.7在线修改varchar字段不在锁表,测试过程如下:
+------------+
| version() |
+------------+
| 5.7.18-log |
+------------+
+----------+
| count(*) |
+----------+
| 7147528 |
+----------+打开两个命令行窗口:
窗口一:
总结: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获得更多日志缓存空间解决问题 。
点击(此处)折叠或打开
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获得更多日志缓存空间解决问题 。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。