程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 5.6 online ddl測試

mysql 5.6 online ddl測試

編輯: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 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操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved