zoukankan      html  css  js  c++  java
  • 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操作。

  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3127428.html
Copyright © 2011-2022 走看看