online ddl主要包括3個(gè)階段,prepare階段,ddl執(zhí)行階段,commit階段,rebuild方式比no-rebuild方式實(shí)質(zhì)多了一個(gè)ddl執(zhí)行階段,prepare階段和commit階段類似。下面將主要介紹ddl執(zhí)行過程中三個(gè)階段的流程。
創(chuàng)新互聯(lián)主營北湖網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),北湖h5微信平臺(tái)小程序開發(fā)搭建,北湖網(wǎng)站營銷推廣歡迎北湖等地區(qū)企業(yè)咨詢
Prepare階段:
創(chuàng)建新的臨時(shí)frm文件(與InnoDB無關(guān))
持有EXCLUSIVE-MDL鎖,禁止讀寫
根據(jù)alter類型,確定執(zhí)行方式(copy,online-rebuild,online-norebuild)
假如是Add Index,則選擇online-norebuild即INPLACE方式
更新數(shù)據(jù)字典的內(nèi)存對(duì)象
分配row_log對(duì)象記錄增量(僅rebuild類型需要)
生成新的臨時(shí)ibd文件(僅rebuild類型需要)
ddl執(zhí)行階段:
降級(jí)EXCLUSIVE-MDL鎖,允許讀寫
掃描old_table的聚集索引每一條記錄rec
遍歷新表的聚集索引和二級(jí)索引,逐一處理
根據(jù)rec構(gòu)造對(duì)應(yīng)的索引項(xiàng)
將構(gòu)造索引項(xiàng)插入sort_buffer塊排序
將sort_buffer塊更新到新的索引上
記錄ddl執(zhí)行過程中產(chǎn)生的增量(僅rebuild類型需要)
重放row_log中的操作到新索引上(no-rebuild數(shù)據(jù)是在原表上更新的)
重放row_log間產(chǎn)生dml操作append到row_log最后一個(gè)Block
commit階段:
當(dāng)前Block為row_log最后一個(gè)時(shí),禁止讀寫,升級(jí)到EXCLUSIVE-MDL鎖
重做row_log中最后一部分增量
更新innodb的數(shù)據(jù)字典表
提交事務(wù)(刷事務(wù)的redo日志)
修改統(tǒng)計(jì)信息
rename臨時(shí)idb文件,frm文件
變更完成
文章名稱:mysql5.6在線DDL
轉(zhuǎn)載來于:http://www.muchs.cn/article36/gehesg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)、品牌網(wǎng)站建設(shè)、服務(wù)器托管、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)