mysql5.7 online ddl怎么查看进度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql5.7 online ddl怎么查看进度相关的知识,希望对你有一定的参考价值。
Online DDL 工具:pt-osc
对于 mysql Online DDL 目前主流的有三种工具:
原生 Online DDL;
pt-osc(online-schema-change),
gh-ost
本文主要讲解 pt-online-schema-change 的使用以及三种工具的简单对比。
一、原理及限制
1.1 原理
1. 创建一个与原表结构相同的空表,表名是 _new 后缀;
2. 修改步骤 1 创建的空表的表结构;
3. 在原表上加三个触发器:delete/update/insert,用于 copy 数据过程中,将原表中要执行的语句在新表中执行;
4. 将原表数据以数据块(chunk)的形式 copy 到新表;
5. rename 原表为 old 表,并把新表 rename 为原表名,然后删除旧表;
6. 删除触发器。
mysql 5.6 online ddl
innodb存储引擎实现online ddl的原理是在执行创建或删除操作的同时,将DML操作日志写入到一个缓存中,待完成索引创建后再重做应用到表上,以此达到数据的一致性,这个缓存大小由参数innodb_online_alter_log_max_size控制,默认是128M,若用户更新的表比较大,并且在创建过程中 伴有大量的写事务,可能碰到这个参数空间不够用的情况。
以下几类DDL操作都可以通过在线的方式操作:
A:辅助索引的创建与删除
B:改变自增长值
C:添加或删除外键
D:列的重命名
E:添加和删除列,但是会copy table
F:改变row_format,改变key_block_size, 但是会copy table
G:添加删除列的not null default xx,default null属性, 但是会copy table
H:添加主键,虽然可以在线修改,但是会导致重新组织表,会copy table,代价非常大
以下几类DDL操作不能通过在线方式操作(online ddl时会阻塞DML操作):
A:修改数据列类型定义,会copy table
B:修改表或列字符集转换, 会copy table
C:删除主键, 会copy table
D:添加全文索引,不会copy table
需要特别注意的是,由于online ddl在创建索引完成后再通过重做DML操作日志来达到数据的一致性,这意味着在索引创建或删除的过程中,SQL优化器不会选择正在创建中或删除中的索引。
以上是关于mysql5.7 online ddl怎么查看进度的主要内容,如果未能解决你的问题,请参考以下文章