>데이터 베이스 >MySQL 튜토리얼 >mysql 5.6 online ddl测试_MySQL

mysql 5.6 online ddl测试_MySQL

WBOY
WBOY원래의
2016-06-01 13:33:00805검색

bitsCN.com

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 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'...

 

其中一个会话执行

 

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操作。

bitsCN.com
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.