MySQL 5.6 online ddl 测试

php中文网
发布: 2016-06-07 17:29:42
原创
1543人浏览过

在生产环境中,因为业务需求,改动mysql表结构,特别是数据量特别大的时候,几百万甚至几千万的数据,mysql online ddl操作非常让

在生产环境中,因为业务需求,改动mysql表结构,特别是数据量特别大的时候,几百万甚至几千万的数据,mysql online ddl操作非常让mysql dba揪心。5.6版本支持online ddl。

为什么mysql ddl操作让dba揪心呢?因为mysql ddl操作内部原理是这样的:

1create table tmp  like table2  (创建临时表,与原表相似)

2insert into tmp select *  from table2  (原数据拷贝到临时表里,并且索引等信息与原表一样)

3drop table table1  删除原表

4rename tmp to table1  临时表名改名为原表

在整个过程中,原表table1加共享锁(s锁),这样对业务影响就很大,作业造成阻塞(曾经同事晚上11点增加字段,,导致订单业务受到影响)接下来测试一下。在mysql5.6版本里,进行了优化,alter table table1 add  ….操作时,增、删、改、查都不会锁表.

首先准备测试数据,尽量千万以上,测试效果明显

[root@aeolus1 bin]# sysbench --test=oltp--oltp-table-size=15000000 --mysql-db=test --mysql-user=root prepare

sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql

Creating table 'sbtest'...

Creating 15000000 records in table'sbtest'...

Smart Picture
Smart Picture

Smart Picture 智能高效的图片处理工具

Smart Picture 77
查看详情 Smart Picture

其中一个会话执行

mysql> alter table sbtest add testvarchar(10);

另一会话执行

mysql> insert into sbtestvalues(0,1,'abc','abc');

Query OK, 1 row affected (0.44 sec)

mysql> delete  from sbtest where id=2000;

Query OK, 1 row affected (1.21 sec)

mysql> update sbtest set k=3 whereid=20000;

Query OK, 1 row affected (0.59 sec)

Rows matched: 1  Changed: 1 Warnings: 0

顺利执行完毕,没有锁表。

当有会话访问时,花费时间比较长,这时进行alter table sbtest add 操作,alter table sbtest操作会等这个会话结束后,再进行ddl操作。

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号