新聞中心
online ddl主要包括3個階段,prepare階段,ddl執(zhí)行階段,commit階段,rebuild方式比no-rebuild方式實質(zhì)多了一個ddl執(zhí)行階段,prepare階段和commit階段類似。下面將主要介紹ddl執(zhí)行過程中三個階段的流程。
Prepare階段:
創(chuàng)建新的臨時frm文件(與InnoDB無關(guān))
持有EXCLUSIVE-MDL鎖,禁止讀寫
根據(jù)alter類型,確定執(zhí)行方式(copy,online-rebuild,online-norebuild)
假如是Add Index,則選擇online-norebuild即INPLACE方式更新數(shù)據(jù)字典的內(nèi)存對象
分配row_log對象記錄增量(僅rebuild類型需要)
生成新的臨時ibd文件(僅rebuild類型需要)
ddl執(zhí)行階段:
降級EXCLUSIVE-MDL鎖,允許讀寫
掃描old_table的聚集索引每一條記錄rec
遍歷新表的聚集索引和二級索引,逐一處理
根據(jù)rec構(gòu)造對應的索引項
將構(gòu)造索引項插入sort_buffer塊排序
將sort_buffer塊更新到新的索引上
記錄ddl執(zhí)行過程中產(chǎn)生的增量(僅rebuild類型需要)
重放row_log中的操作到新索引上(no-rebuild數(shù)據(jù)是在原表上更新的)
重放row_log間產(chǎn)生dml操作append到row_log最后一個Block
commit階段:
當前Block為row_log最后一個時,禁止讀寫,升級到EXCLUSIVE-MDL鎖
重做row_log中最后一部分增量
更新innodb的數(shù)據(jù)字典表
提交事務(刷事務的redo日志)
修改統(tǒng)計信息
rename臨時idb文件,frm文件
變更完成
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享名稱:mysql5.6在線DDL-創(chuàng)新互聯(lián)
當前網(wǎng)址:http://fisionsoft.com.cn/article/desoij.html