zoukankan      html  css  js  c++  java
  • pt-online-schema-change 和 oak-online-alter-table功能对比

    今天再查看文档的时候突然看到了oak-online-alter-table执行在线ddl,以前只使用过pt-online-schema。所以这里收集一些资料对比下差异,方便日后自己查阅。 

    一.oak-online-alter-table

      openark工具包是一组用于MySQL的实用工具,该工具集解决日常维护任务,这些工作比较复杂和耗时。其中oak-online-alter-table就是该工具集中的一个工具,该工具执行非阻塞ALTER TABLE的操作。当然还有其他的工具,童鞋们自行查阅资料。

    英文原版文档参见: http://code.openark.org/blog/mysql/online-alter-table-now-available-in-openark-kit

    在使用oak-online-alter-table对表执行ALTER TABLE时存在如下限制:

    (1) 在该表上面至少有一个单列的UNIQUE KEY
    (2) 更改原始表为单个字段的唯一索引
    (3) 该表没有定义触发器"AFTER"(oak会自己创建触发器)
    (4) 该表没有FOREIGN KEY
    (5) 表名长度不超过57个字符

    该工具提供了以下三种基本功能:

    1.一个非阻塞ALTER TABLE操作:添加列或索引,删除列或索引,修改列,表字符集转换等,都是支持的,如下:
    添加列(新列必须有一个默认值)
    删除列(旧表必须有一个单列的唯一索引)
    修改列(改变字段类型,包括唯一键的列)
    添加索引(普通索引,唯一索引,全文索引。)
    删除索引(旧表必须有一个单列的唯一索引)
    修改表引擎:有效,但应格外注意当处理事务性引擎
    添加外键约束

    2.一个空的ALTER,重建一个表:释放磁盘空间和重新组织表,相当于优化表。

    3.(可能会在未来版本不再支持):创建一个镜像表,与原始表同步,只要不发生如下操作:
    对原始表ALTER TABLE
    对原始表TRUNCATE
    使用LOAD DATA INFILE向原始表导入数据
    对原始表OPTIMIZE TABLE

    工具原理

    该工具运行时,它允许INSERT,UPDATE,DELETE,REPLACE原始表。但是不允许TRUNCATE,ALTER,REPAIR OPTIMIZE或者其他方式对原表进行操作。
    该工具适用于InnoDB表,MyISAM表,或以其他任何表级锁的存储引擎((MEMORY, ARCHIVE))。该工具工作原理是创建一个镜像表的同时,它慢慢与原始表同步。直到同步完成,要做到这一点,该工具必须在原始表创建AFTER INSERT, AFTER UPDATE, AFTER DELETE触发器。镜像表与原始表同步发生在几个步骤。在这些步骤中,数据被从原始表复制到镜像表。这是以行块进行,这个大小是可以用chunk-size选项配置的。当一个块被复制,在(MyISAM,ARCHIVE,MEMORY)存储引擎上有读锁,或包含在该块上面的行记录(innodb),较小的块——更快的锁被移除,允许更大的并发性。对于写密集型应用,它可能是可取的,允许对块之间的停顿,以使尽可能减少影响。这可以使用sleep-ratio选项进行配置。而块之间停顿时没有被加锁。即便如此,对性能的影响是在运行应用程序时,这是由于触发器被添加到表上和DML语句在向镜像表同步。它需要有足够的磁盘空间来容纳改变的表(如一个正常的ALTER TABLE)。在操作完成时才出现磁盘空间恢复(取决于你的存储引擎和配置)。

    二.pt-online-schema-change

      该工具是percona-toolkit工具包中其中的一个工具,简单说和oak-online-alter-table有着一样的功能。都是实现在线架构改变的工具。

    工作原理:

    (1)如果存在外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,针对相应的设置进行处理。

    (2)创建一个新的表,表结构为修改后的数据表,用于从源数据表向新表中导入数据。

    (3)创建触发器,在复制数据开始之后,将对源数据表继续进行数据修改的操作记录下来,以便在数据复制结束后执行这些操作,保证数据不会丢失。

    (4)复制数据,从源数据表中复制数据到新表中。

    (5)修改外键相关的子表,根据修改后的数据,修改外键关联的子表。

    (6)更改源数据表为old表,把新表改为源表名,并将old表删除。

    (7)删除触发器。

    存在如下限制:

    (1)对操作的表必须要有主键或者唯一键

    (2)增加的字段如果为NOT NULL,会报错,需要添加默认值才可以成功。

  • 相关阅读:
    binary tree解题模板
    done infosys 八股文springboot员工管理系统
    好题 telus国际_从镜子里看到另一台显示器的面试
    done 对于spring boot oa的面试思考
    done 有一点题 infosys 秀出你的ID spring经历问得很细
    Eliassen Group vendor 检测眼球视线的oa 又细又多做不完
    done tek 把你从牛角尖钻出来的node list算法题
    contagious.ly 自豪的纽约客,政府vendor
    Apple screening carlos白人 头晕脑胀的三道简单算法题
    done apple_Infosys_Jugal 要求完整写出Java8 stream
  • 原文地址:https://www.cnblogs.com/davygeek/p/7021099.html
Copyright © 2011-2022 走看看