MySQL 5.6的Online DDL功能測試

來源:互聯網
上載者:User

MySQL 5.6的Online DDL功能測試

online DDL的前身是 innodb fast index creation(5.1和5.5), 5.6裡對這個功能做了擴充:很多alter table的操作繞開了 table copying,支援DML並行作業。

 一、online ddl的支援測試:
1、主鍵的增刪
 主鍵添加:
 支援online ddl,加主鍵過程中支援 並發的DML
主鍵刪除:
不支援online ddl,刪除主鍵過程需要copy table,導致DML被阻塞

2、索引的增刪
1)普通索引
5.5使用新的邏輯(fast index creation),不再copy表,(參數old_alter_table),加快的索引的建立和刪除,
                            但是會阻塞DML,可以select
 5.6中建立和刪除索引不再阻塞dml
 2)unique索引
 同上

3、欄位的增刪改
 新增:
 (alter table test add hehe2 int default 100)
5.5阻塞 DML,支援select
 5.6支援並發DML
刪除:
 (alter table test drop hehe2)
5.5阻塞 DML,支援select
 5.6支援並發DML
修改:
  只改欄位名:
(alter table test change hehe2 hehe20 int default '100')
 5.5阻塞 DML,支援select
 5.6支援online ddl,並發DML
  修改欄位類型:
 (alter table test change hehe20 hehe2 varchar(100) default '100')
5.5阻塞 DML,支援select
 5.6不再支援online ddl

http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html
中的Table 14.5列出了詳細的online ddl支援的操作類型, 但是實際上並不需要記憶這麼多:

二、新引入文法:
 在5.6中,alter table增加了新的文法:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
 LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
 ALGORITHM:
INPLACE: 不copy table
 COPY:    copy table
 DEFAULT:

LOCK:
 DEFAULT:    mysql自己選擇鎖定資源最少的方式
NONE:      支援select和DML
 SHARED:  支援select,不支援DML
 EXCLUSIVE:不支援select,不支援DML


可以借用這個新增文法測試是否alter table語句支援online DDL:
建立一個表結構一樣的表,儲存少量的資料:
root:3306:popo>alter table test change hehe2 hehe20 int default '100' ,LOCK=NONE;             
 ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: Cannot change column type INPLACE. Try LOCK=SHARED.
根據提示,這個欄位類型修改的alter table不支援並發的DML操作

root:3306:popo>alter table test change hehe2 hehe20 int default 100,  ALGORITHM=inplace;
 ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
同樣 這個alter table 也需要copy table操作。


 三、online ddl相關參數和原理:
innodb_online_alter_log_max_size
online ddl的原理是,mysql把在ddl時間內的所有的 插入,更新和刪除操作記錄到一個記錄檔, 然後再把這些增量資料應用到相應的表上(等表上的事務完全釋放後),這個臨時記錄檔的上限值由innodb_online_alter_log_max_size指定,每次擴充innodb_sort_buffer_size的大小 該參數如果太小有可能導致DDL失敗,這期間所有的未提交的並發DML操作都會復原;但是如果太大會可能會導致後DDL操作最後鎖定表的時間更長(鎖定表,應用日誌到表上)。 每一個變化的索引或者表都會分配一個。

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.