zoukankan      html  css  js  c++  java
  • 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,代价非常大

    I:修改表持久化统计信息选项

    J:修改引擎,但是会copy table

    以下几类DDL操作不能通过在线方式操作(online ddl时会阻塞DML操作):

    A:修改数据列类型定义,会copy table

    B:修改表或列字符集转换, 会copy table

    C:删除主键, 会copy table

    D:添加全文索引,不会copy table

    需要特别注意的是,由于online ddl在创建索引完成后再通过重做DML操作日志来达到数据的一致性,这意味着在索引创建或删除的过程中,SQL优化器不会选择正在创建中或删除中的索引。

    参考信息:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

  • 相关阅读:
    Ural-1018 Binary Apple Tree(树形dp+分组背包)
    Ural 1332 把圆细分+圆内切,内含关系判定
    读取图片文件(C#实现)
    使用ZXing.dll库生成二维码(C#实现)
    combobox绑定数据
    DataGridView显示日期格式问题
    夜深忽梦少年事
    Scrum角色
    Srum框架
    Scrum流程
  • 原文地址:https://www.cnblogs.com/xiaoboluo768/p/5359183.html
Copyright © 2011-2022 走看看