MySQL Online DDL与DML并发阻塞关系总结MySQL DDL操作执行的三种方式

1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与COPY方法相关的磁盘I/O和CPU周期,从而最小化数据库的总体负载。

最小化负载有助于在DDL操作期间保持良好的性能和高吞吐量。

2,COPY,不允许并发执行过多个DDL,执行过程中表不允许写但可读。

过程是通过创建一个新结构的临时表,将数据copy到临时表,完成后删除原表,重命名新表的方式,需要拷贝原始表,

3,INSTANT,从 MySQL 8.0.12 开始被引入并默认使用。目前 INSTANT 算法只支持增加列等少量 DDL 类型的操作,其他类型仍然会默认使用 INPLACE。

以下是MySQL 5.7版本中各种DDL操作的执行方式,总结一下:

1,如果DDL的执行方式是InPlace = YES,那么改DDL的执行会支持并发DML,不会影响表的增删查改,

1.1,如果DDL的执行方式是InPlace = YES &  Rebuilds Table = No,那么Only Modifies Metadata一定为Yes,也即仅仅修改元数据,类似于INSTANT

1.2,如果DDL的执行方式是InPlace = YES  & Rebuilds Table = Yes,那么Only Modifies Metadata一定为No,需要考虑Rebuilds Table对IO和CPU等资源的消耗

2,如果DDL的执行方式是InPlace = NO,那么改DDL的执行期间表只读,阻塞写(增删改),同时需要考虑对IO和CPU等资源的消耗

3,如果是INSTANT方式,类似于1.1

如下,对于执行期间不支持并发DML的操作,标记了出来,如果不是影响并发DML的操作,就不需要考虑第三方工具了,只需要考虑IO和CPU等资源的消耗。

因为用第三方工具同样需要消耗IO以及CPU等资源。

正常来说操作,修改字段数据类型,以及增加衍生列,修改衍生列字段顺序这三种,以及多数分区相关的操作的同时,不支持并发DML,其他DDL执行时都支持并发DML。

索引操作

CREATE INDEX name ON table (col_list);(ALTER TABLE tbl_name ADD INDEXname (col_list);)DROP INDEX name ON table;(ALTER TABLE tbl_name DROP INDEXname;)ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE;CREATE FULLTEXT INDEX name ON table(column);CREATE TABLE geom (g GEOMETRY NOT NULL);ALTER TABLE geom ADD SPATIAL INDEX(g), ALGORITHM=INPLACE, LOCK=SHARED;ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE, ALGORITHM=INPLACE;

主键操作

ALTER TABLE tbl_name ADD PRIMARY KEY (column)ALTER TABLE tbl_name DROP PRIMARY KEY

ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column)

列操作

ALTER TABLE tbl_name ADD COLUMNcolumn_name column_definition,ALTER TABLE tbl_name DROP COLUMNcolumn_nameALTER TABLEtbl CHANGE old_col_name new_col_name data_typeALTER TABLE tbl_name MODIFY COLUMN col_namecolumn_definition FIRSTALTER TABLE tbl_name CHANGE c1 c1 BIGINT

ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255)ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULTliteralALTER TABLE tbl ALTER COLUMN col DROP DEFAULT

ALTER TABLE table AUTO_INCREMENT=next_valueALTER TABLE tbl_name MODIFY COLUMN column_name data_type NULL

ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL

ALTER TABLE t1 MODIFY COLUMN c1 ENUM('a', 'b', 'c', 'd')

衍生列(generated column)操作

ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED)ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRSTALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL)ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRSTALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE

外键操作

ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)REFERENCEStbl2(col2) referential_actions;ALTER TABLE tbl DROP FOREIGN KEY fk_name;

表操作

ALTER TABLE tbl_name ROW_FORMAT =row_formatALTER TABLE tbl_name KEY_BLOCK_SIZE =valueALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20, STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;

OPTIMIZETABLEtbl_name;ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE;ALTER TABLE tbl_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;ALTER TABLE old_tbl_name RENAME TO new_tbl_name, ALGORITHM=INPLACE, LOCK=NONE;

表空间操作

ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;

分区操作

http://www.dengb.com/sjkjc/1384434.htmlwww.dengb.comtruehttp://www.dengb.com/sjkjc/1384434.htmlTechArticleMySQL Online DDL与DML并发阻塞关系总结 MySQL DDL操作执行的三种方式 1,INPLACE,在进行DDL操作时,不影响表的读写,可以正常执行表上的DML操作...

oracle ddl会被什么阻塞,MySQL Online DDL与DML并发阻塞关系总结相关推荐

  1. mysql ddl导出_Navicat批量导出mysql的DDL语句

    工作中有的时候需要将某个库中的表.视图.函数.存储过程等创建语句导出,又不需要表中的数据.同时最好放在同一个文件里面,这样方便拷贝. 方法一:需要拷贝的创建语句条数不多,不至于让你拷到头脑发晕的地步, ...

  2. mysql 原理 ~ DDL之在线DDL

    一 简介:今天来DDL的变革 二 DDL演化方式:   1 copy table : 1 创建临时表2 copy数据到临时表 3 rename进行交换 缺点 1 阻塞事务 2占用磁盘空间   2 in ...

  3. mysql怎么在海量数据上ddl_浅谈MySQL Online DDL(中)

    本文首发于个人微信公众号<andyqian>,期待你的关注! 前言 在上一篇文章中<浅谈MySQL Online DDL (上)>中,我们谈到了MySQL Online DDL ...

  4. java有趣的技术分享ppt_技术分享 | 关于 MySQL Online DDL 有趣的验证

    作者:胡存存 爱可生 DBA 团队成员,主要负责 MySQL 故障处理和 SQL 审核优化.对技术执着,为客户负责. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系 ...

  5. mysql online ddl和pt_MySQL变更之:Online DDL 和 PT-OSC 该选谁?

    参考: 在MySQL 5.6版本以前,最昂贵的数据库操作之一就是执行数据定义语言(DDL,例如CREATE,DROP,ALTER等)语句,特别是ALTER语句,因为在修改表时,MySQL会阻塞整个表的 ...

  6. mysql online ddl 5.6_MySQL 5.6的Online DDL功能测试

    online DDL的前身是 innodb fast index creation(5.1和5.5), 5.6里对这个功能做了扩展:很多alter table的操作绕开了 table copying, ...

  7. MySQL Online DDL学习笔记

    MySQL online DDL的功能就是在对表就行DDL操作的同时也可以对表进行读写操作, 即对表的DDL操作不会影响该表上的事务.  该功能的优点: 改善繁忙生产环境的响应效率和可用性. 可以使用 ...

  8. MySQL 执行DDL语句 hang住了怎么办?

    MySQL 执行DDL语句 hang住了怎么办? 不要慌,先点支烟,听我娓娓道来! 前两天,早上7点多的时候,抓起手机忽然看到了圈内的一则DDL语句 hang住的案例,阅读到文末,发现文中留有一些疑问 ...

  9. Oracle大佬离职,怒喷MySQL是“糟糕的数据库”……

    欢迎关注方志朋的博客,回复"666"获面试宝典 在这位工程师看来,PostgreSQL 才是开源 RDBMS 的更好选择. 数据库工程师在离职的时候会干些什么?拿张贺卡.收起纪念礼 ...

最新文章

  1. 2022-2028年中国水处理分离膜行业市场现状调研及市场需求潜力报告
  2. Linux(CentOS 7_x64位)系统下安装RDkit
  3. 骑摩托的蒙娜丽莎 - 曼妙风骚的花式慢跑算法
  4. professional asp.net 4 with c# and VB.net 阅读笔记
  5. Matlab常用函数流水账
  6. NameNode与DataNode的工作原理剖析
  7. linux 修改hostname
  8. [js]jquery里的jsonp实现ajax异源请求
  9. 单调栈解决维持相对位置不变最小/最大字典序问题
  10. 数字化园区、智慧园区、物业管理、园区设备、房屋资源、维修业务、巡查管理、招商管理、商业租售管理,收支管理,合同管理,人员管理,日常维护,巡检管理,报检报修、物业驾驶舱、axure原型、rp原型
  11. hdu 1316 斐波那契数
  12. The Nighth Assignment
  13. 【Data guard】Switchover切换
  14. redis和couchbase的比较
  15. hadoop-06-http服务
  16. c语言 fread读指定字节,fread函数 c语言中fread函数怎么用
  17. Python高分辨率图像的分割与合并
  18. Win10 外接显示器,Chrome花屏/视频全屏黑屏解决方法
  19. linux用ping命令测试网速,《iPhone》7用ping命令测试网速方法介绍
  20. 谷歌语音合成_如何修改Google语音合成语音

热门文章

  1. Singleton模式
  2. 关于 Oracle DB CONSTRAINT约束的一些SQL ORA-02292: integrity constraint violated
  3. html canvas 与小丑 。
  4. 比较顺序表和链表的优缺点
  5. 查看MYSQL数据库中所有用户及拥有权限
  6. EXCEL 函数----用countif()函数计算重复数值个数和表示重复值
  7. ubuntu kylin 桌面版 13.10 Firefox中安装 Flash 插件
  8. Revit API创建几何实体Solid并找到与之相交的元素
  9. asp.net母板使用注意
  10. Element-ui学习笔记3--Form表单(二)