Welcome 微信登录

首页 / 数据库 / MySQL / MySQL 5.6 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 preparesysbench 0.4.12:  multi-threaded system evaluation benchmarkNo DB drivers specified, using mysqlCreating table "sbtest"...Creating 15000000 records in table"sbtest"...其中一个会话执行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操作。MySQL delete 千万数据操作Oracle 将 不同列 的值 拼接成一个 字符串相关资讯      MySQL DDL  MySQL 5.6 
  • MySQL 5.6 的--dump-slave参数的用  (07月03日)
  • MySQL 5.6快速定位不合理索引  (05月07日)
  • MySQL 5.6 参数之 extra_port  (01月14日)
  • Linux下安装MySQL 5.6.10包冲突问  (05月10日)
  • MySQL-5.6.x二进制版本安装记录  (04月10日)
  • MySQL 5.6开启全查询日志时注意事  (12/21/2015 19:48:58)
本文评论 查看全部评论 (0)
表情: 姓名: 字数