mysql5.6在線DDL

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階段:

  1. 創(chuàng)建新的臨時(shí)frm文件(與InnoDB無關(guān))

  2. 持有EXCLUSIVE-MDL鎖,禁止讀寫

  3. 根據(jù)alter類型,確定執(zhí)行方式(copy,online-rebuild,online-norebuild)
    假如是Add Index,則選擇online-norebuild即INPLACE方式

  4. 更新數(shù)據(jù)字典的內(nèi)存對(duì)象

  5. 分配row_log對(duì)象記錄增量(僅rebuild類型需要)

  6. 生成新的臨時(shí)ibd文件(僅rebuild類型需要)

ddl執(zhí)行階段:

  1. 降級(jí)EXCLUSIVE-MDL鎖,允許讀寫

  2. 掃描old_table的聚集索引每一條記錄rec

  3. 遍歷新表的聚集索引和二級(jí)索引,逐一處理

  4. 根據(jù)rec構(gòu)造對(duì)應(yīng)的索引項(xiàng)

  5. 將構(gòu)造索引項(xiàng)插入sort_buffer塊排序

  6. 將sort_buffer塊更新到新的索引上

  7. 記錄ddl執(zhí)行過程中產(chǎn)生的增量(僅rebuild類型需要)

  8. 重放row_log中的操作到新索引上(no-rebuild數(shù)據(jù)是在原表上更新的)

  9. 重放row_log間產(chǎn)生dml操作append到row_log最后一個(gè)Block

  • commit階段:

  1. 當(dāng)前Block為row_log最后一個(gè)時(shí),禁止讀寫,升級(jí)到EXCLUSIVE-MDL鎖

  2. 重做row_log中最后一部分增量

  3. 更新innodb的數(shù)據(jù)字典表

  4. 提交事務(wù)(刷事務(wù)的redo日志)

  5. 修改統(tǒng)計(jì)信息

  6. rename臨時(shí)idb文件,frm文件

  7. 變更完成

文章名稱: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)

網(wǎng)站托管運(yùn)營