天天看點

mysql 5.6 online ddl

innodb存儲引擎實作online ddl的原理是在執行建立或删除操作的同時,将DML記錄檔寫入到一個緩存中,待完成索引建立後再重做應用到表上,以此達到資料的一緻性,這個緩存大小由參數innodb_online_alter_log_max_size控制,預設是128M,若使用者更新的表比較大,并且在建立過程中 伴有大量的寫事務,可能碰到這個參數空間不夠用的情況。

以下幾類DDL操作都可以通過線上的方式操作:

A:輔助索引的建立與删除

B:改變自增長值

C:添加或删除外鍵

D:列的重命名

E:添加和删除列,但是會copy table

F:改變row_format,改變key_block_size, 但是會copy table

G:添加删除列的not null default xx,default null屬性, 但是會copy table

H:添加主鍵,雖然可以線上修改,但是會導緻重新組織表,會copy table,代價非常大

I:修改表持久化統計資訊選項

J:修改引擎,但是會copy table

以下幾類DDL操作不能通過線上方式操作(online ddl時會阻塞DML操作):

A:修改資料列類型定義,會copy table

B:修改表或列字元集轉換, 會copy table

C:删除主鍵, 會copy table

D:添加全文索引,不會copy table

需要特别注意的是,由于online ddl在建立索引完成後再通過重做DML記錄檔來達到資料的一緻性,這意味着在索引建立或删除的過程中,SQL優化器不會選擇正在建立中或删除中的索引。

參考資訊:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

作者:小蘿蔔

微信公衆号:開源城邦

出處:小蘿蔔的部落格 http://www.cnblogs.com/xiaoboluo768/

感謝您的認真閱讀。本文版權歸作者所有,歡迎轉載,但請保留該聲明。

最新拙作:《千金良方——MySQL性能優化金字塔法則》,京東有售,圖書提供附錄提供電子版免費下載下傳,詳見連結:http://www.broadview.com.cn/book/5458

關于此書的代碼段、部分高清大圖和附錄已開源,詳見(覺得有用的話幫忙順手點個星星):https://github.com/xiaoboluo768/qianjinliangfang

關于此書基礎篇中關于4個系統字典庫全面講解文檔已開源,詳見(覺得有用的話幫忙順手點個星星):https://github.com/xiaoboluo768/mysql-system-schema