包含mysqlonlineddl的词条
本篇文章给大家谈谈mysqlonlineddl,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何从mysql数据库中获取一个表的表结构
- 2、mysql online ddl
- 3、技术分享 | MySQL 并行 DDL
- 4、关于mysql 5.6 哪些操作可以进行online ddl 详解
- 5、mysql怎么查看表结构
- 6、Mysql Online DDL 和 pt-ost 、gh-ost 简要
如何从mysql数据库中获取一个表的表结构
列出表(列)结简消前桥春构:
mysql DESCRIBE tableName;
mysql DESCRIBE tableName columnName;
mysql DESC tableName;
mysql拦清 SHOW COLUMNS FROM tableName;
% mysqlshow dbName tableName!
mysql online ddl
看过这些文章:
文章之后,我觉得 mysql 5.x 的 online ddl 只是在 prepare 阶段、茄氏commit 阶段会有写锁,但是在真正执行的阶段都是读锁核尺,不会阻塞读写。online ddl 过程如下:
1、拿 MDL 写锁
2、降级成 MDL 读锁
3、真正做 DDL
4、升级成 MDL 写锁
5、释放 MDL 锁。
1,2,4,5 阶段没有表冲突,执行时间非常短,只是第3阶段占用了 DDL 的绝大部分时间,这个期颤氏散间表可以正常读写数据。
最后,还想说一点,通过 DBA 得知,8.0 加列只需要一秒,牛逼
技术分享 | MySQL 并行 DDL
随着 MySQL 版本的不断更新,对 DDL 操作的支持也在不断的完善和更新:比如从 MySQL 5.6 引入 Online DDL ,在 MySQL 5.7 对 Online DDL 进一步完善,到现在的 8.0 版本,则对 DDL 的实现重新进行了设计,比如 DDL 操作支持原子特性,在 MySQL 8.0.27 引入并行 DDL 。本篇就来探究一下 MySQL 8.0.27 的并行 DDL 对于 DDL 操作速度的提升。
MySQL 8.0.14 引入了 innodb_parallel_read_threads 变量来控制扫描聚簇索引的并行线程。MySQL 8.0.27 引入了 innodb_ddl_threads 变量来控制用于创建二燃丛级索引时的并行线程数量,此参数一般和一并引入的 innodb_ddl_buffer_size 一起使用,innodb_ddl_buffer_size 用于指定进行并行 DDL 操作时能够使用的 buffer 大小,buffer 是在所有的 DDL 并行线程中平均分配的,所以一般如果调大 innodb_ddl_threads 变量时,也需要调大 innodb_ddl_buffer_size 的大小。
innodb_ddl_threads 、innodb_ddl_buffer_size 和 innodb_parallel_read_threads 的默认大小分别为:
接下来测试一下调大 innodb_ddl_threads 、innodb_ddl_buffer_size 和 innodb_parallel_read_threads 参数值对亏碧 DDL 操作的性能提升。
首先创建一张 5000 万的表:
分别测试不同的线程数量和缓冲区大小的 DDL 操作时间,例如:
通过不断调整相关参销段举数得到以下结果:
可以看到,随着并发线程的增多和 buffer 的增加,DDL 操作所占用的资源也越多,而 DDL 操作所花费的时间则越少。不过通过对比资源的消耗和 DDL 速度的提升比例,最合理的并行线程数量为4-8个,而 buffer 大小可以根据情况进行调整。
参考链接:
关于mysql 5.6 哪些操作可以进行online ddl 详解
实际搜闭测试中add primary key 和修改字段类型是需要copy tmp table的并且阻塞dml操作,另外在5.6.17版本之前时候用alter table table_name engine=innodb 是需要 copy table的并且也阻塞dml。
本来打算翻译成中文世猛裂,后来发现这些英文实在是太知高简单了,就直接贴出来吧。
请看下图:
[img]mysql怎么查看表结构
mysql
查看表结构简单命令。
一、简单描述表结构,字段类型desc
tabl_name;
显示表结构,字段类型,主键,简核衡是否为空等属性,但不显示外键。
二、查询表中列的注释信息
select
*
from
information_schema.columns
where
table_schema
=
'db'
#表所在数据库
and
table_name
=
'tablename'
;
#你要查的表
三、只查询列名和注释
select
column_name,
column_comment
from
information_schema.columns
where
table_schema
='db'
and
table_name
=
'tablename'
;
四、#查看表的注拦做释
select
table_name,table_comment
from
information_schema.tables
where
table_schema
=
'db'
and
table_name
='tablename'
ps:二~四是在元数据氏档表中查看,我在实际操作中,常常不灵光,不知为什么,有了解的大侠请留印。
五、查看表生成的ddl
show
create
table
table_name;
Mysql Online DDL 和 pt-ost 、gh-ost 简要
在 Mysql 5.6 之前版本中 , 如果要修改一个表的ddl信息 ,需要锁表 。
具体步骤如下:
下面是Mysql官方文档对于DDL操作的总结:
可以使用 Alter 语句支持 DDL 特性 ,比如可以用 LOCK = NONE 无锁变更。
percona是一个开源产品 , 是管理Mysql的工具。
PT-OSC(Percona Toolkit Online Schema Change)
Percona Toolkit 包含很多 mysql 管理的功能 ,现在要说的是 online-schema-change上
PT-OSC 原理是建表 ,使用触发器同步数据 ,然后原子性rename。
这样可以支持在线无锁,不停机Online-DDL 。
具体步骤如下:
Percona 有一些限制和缺陷 ,根据它的原理 ,原表不能存在触发器 ,这玩意是唯一。另外原表必须存在PK或者UK。另外就是触发器的问题了,触发器带来性能开销,并且无法停止,那我就不能控制我同步的开关和速度。
但是gh-ost说它可以。
go-ost基于bin-log同步 , 基于binlog肯定都是伪装成一个replica。
由于使用单线程回放binlog来替换触发器,所以增量DML回放效率不如触发器,因为pt-osc的增量回放并发度是与业务DML并发度相同的,是多线程的。
相对于percona的优势是:
因为出的太晚了 ,然后percona 和 gh-ost等等开源产品已经大规模实践了,Mysql就更加没敬坦什么实践案例和经验了,大家就不太愿意尝试或者迁移了。没唤
大厂来说基本上都是平台封装了,类似idb ,会把无锁变更细节屏蔽了,只需要提工单就可以了亮察桐 ,但是底层基本上也是建表同步rename个思路。
小公司的话,可以使用percona 、 go-ost 等工具。
MySQL 8.0 Online DDL和pt-osc、gh-ost深度对比分析
Mysql Online DDL
pt-online-schema-change
gh-ost
MySQL5.6在线表结构变更(online ddl)总结
关于mysqlonlineddl和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。