MySQL Online DDL的實現細節介紹

chenfeng發表於2017-04-17
 MySQL Online DDL的實現細節共分為三個階段:
Prepare階段
1.建立臨時frm檔案
2.持有EXCLUSIVE-MDL鎖,禁止讀寫
3.根據ALTER型別,確定執行方式(copy,online-rebuild,online-norebuild)
4.更新資料字典的記憶體物件
5.分配row_log物件記錄增量
6.生成臨時ibd檔案

ddl執行階段
1.降級EXCLUSIVE-MDL鎖,允許讀寫
2.掃描原表的聚簇索引每條記錄
3.遍歷新表的聚簇索引和二級索引,逐一處理
4.根據記錄構造對應的索引項
5.將構造索引項插入sort_buffer塊
6.將sort_buffer塊插入新的索引
7.處理ddl執行過程中產生的增量(僅rebuild型別需要)

commit階段
1.升級到EXCLUSIVE-MDL鎖,禁止讀寫
2.應用最後row_log中產的日誌
3.更新innodb的資料字典表
4.提交事務(刷事務的redo日誌)
5.修改統計資訊
6.rename臨時idb檔案,frm檔案
7.變更完成

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2137420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章