国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Mysql Online DDL的使用詳解

瀏覽:110日期:2023-10-02 17:11:24
目錄正文LOCK參數(shù)ALGORITHM參數(shù)COPY TABLE流程IN-PLACE流程允許并發(fā)DML的DDL操作不允許并發(fā)DML的DDL操作正文

Online DDL在MySQL 5.6才開始支持的,在5.5及之前版本,使用alter table/create index等命令進(jìn)行表結(jié)構(gòu)修改操作均會(huì)鎖表,這在生產(chǎn)環(huán)境上明顯是不可接受的。

在MySQL 5.7,Online DDL在性能和穩(wěn)定性上不斷得到優(yōu)化,性能有顯著優(yōu)勢,且對業(yè)務(wù)負(fù)載影響小,停寫時(shí)間可控,相對pt-osc/gh-ost來說,無需安裝第三方依賴包,同時(shí)支持Inplace算法的Online DDL,由于無需拷表,所需磁盤空間也更小。

先來看一個(gè)常見的DDL語句:

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

其中,LOCK描述了DDL期間運(yùn)行的并發(fā)程度,ALGORITHM描述了DDL的實(shí)現(xiàn)方式

LOCK參數(shù) LOCK=NONE:允許并發(fā)的查詢和DML操作 LOCK=SHARED:允許并發(fā)的查詢,但阻塞DML操作 LOCK=DEFAULT: 由系統(tǒng)決定,允許盡可能多的并發(fā)性(并發(fā)查詢、DML或兩者)。如果省略LOCK子句相當(dāng)于指定LOCK=DEFAULTLOCK=EXCLUSIVE:阻塞并發(fā)查詢和DML操作。 ALGORITHM參數(shù) ALGORITHM=COPY:采用拷表方式進(jìn)行表變更,與pt-osc/gh-ost類似; ALGORITHM=INPLACE:僅需要進(jìn)行引擎層數(shù)據(jù)改動(dòng),不涉及Server層; COPY TABLE流程 首先建立臨時(shí)表,表結(jié)構(gòu)為ALTAR TABLE更改后的結(jié)構(gòu) 將原表中數(shù)據(jù)導(dǎo)入到臨時(shí)表(server層創(chuàng)建臨時(shí)表,會(huì)有顯示的IBD文件) 刪除原表 將臨時(shí)表rename為原來的表名

同時(shí)這一過程中,為了保持?jǐn)?shù)據(jù)的一致性,中間復(fù)制數(shù)據(jù)時(shí)(Copy Table)全程鎖表只讀,如果有寫請求進(jìn)來將無法提供服務(wù),將導(dǎo)致連接數(shù)爆張。

IN-PLACE流程 建立一個(gè)臨時(shí)文件,掃描原表主鍵的所有數(shù)據(jù)頁 用數(shù)據(jù)頁中原表記錄生成B+樹,存儲到臨時(shí)文件中(innodb_temp_data_file_path臨時(shí)表空間下創(chuàng)建臨時(shí)文件) 生成臨時(shí)文件的過程中,將所有對原表的操作記在一個(gè)日志文件(rowlog)中 臨時(shí)文件生成后,將日志文件中的操作應(yīng)用到臨時(shí)文件,得到一個(gè)輯數(shù)據(jù)上與原表相同 數(shù)據(jù)文件(日志文件記錄和重放操作) 用臨時(shí)文件替換原表數(shù)據(jù)文件

這一過程中,alter 語句在啟動(dòng)的時(shí)候獲取MDL寫鎖,但是這個(gè)寫鎖在真正拷貝數(shù)據(jù)之前就退化成讀鎖,也就是說在最耗時(shí)的copy數(shù)據(jù)到臨時(shí)文件的過程中,原表是可以進(jìn)行dml操作的,僅僅會(huì)在最后的新舊表切換階段加鎖,這個(gè)rename的時(shí)間就非常快了。

允許并發(fā)DML的DDL操作 創(chuàng)建/新增二級索引 重命名二級索引 刪除二級索引 改變索引類型(USING {BTREE | HASH}) 添加主鍵(expensive cost) 刪除主鍵并增加另一個(gè)(expensive cost)(ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;) 新增列 (expensive cost) 刪除列 (expensive cost) 重命名列 列重新排序 (expensive cost) 改變列默認(rèn)值 刪除列默認(rèn)值 改變列自增值 設(shè)置列屬性null/not null (expensive cost) 修改枚舉或集合列的定義 Change ROW_FORMAT Change key block size

標(biāo)記為expensive cost的操作雖然允許OnlineDDL,但本身對服務(wù)器IO,CPU都會(huì)造成較高負(fù)擔(dān),同時(shí)會(huì)導(dǎo)致復(fù)制阻塞,造成另一種形式的從庫復(fù)制延遲,所以如果是大表,建議業(yè)務(wù)低峰期執(zhí)行

不允許并發(fā)DML的DDL操作 添加全文索引 添加空間索引 刪除主鍵 改變列數(shù)據(jù)類型 添加自增列(新增列->變?yōu)樽栽隽校? 變更表字符集 修改數(shù)據(jù)類型長度 特例:varchar字符長度從10變更到小于255 采用inplace方式不會(huì)鎖表;從255變更到10會(huì)鎖表;

以上就是Mysql Online DDL的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Mysql Online DDL的使用的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 久久99网站 | 午夜性a一级毛片 | 日韩欧美亚洲中字幕在线播放 | 国产成人亚洲精品无广告 | 91香蕉国产亚洲一区二区三区 | 日韩视频网 | 九九热精品在线 | 成人看片在线观看免费 | 国产精品久久久久久久hd | 色久在线| 国产一二三区在线观看 | 精品国产免费第一区二区三区日韩 | 免费一级毛片在线播放放视频 | 国产在线91精品天天更新 | 成年女人免费看 | 一区二区三区国产 | 三及毛片 | 精品国产亚洲人成在线 | 一二三中文乱码亚洲乱码 | 亚洲国产精品久久网午夜 | 伊人久色 | 最新黄网 | 国产精选经典三级小泽玛利亚 | 日本成人在线看 | 欧美特黄特色aaa大片免费看 | 欧美毛片a级毛片免费观 | 成人小视频在线观看免费 | 韩国日本三级在线观看 | 曰本女人色黄网站 | 国产成人综合高清在线观看 | 久久久国产99久久国产首页 | 午夜成人影视 | 日本一区二区三区四区无限 | 国内精品免费一区二区三区 | 成人欧美 | 国产三级国产精品国产普男人 | 国产一级爱做片免费观看 | 男女朋友做爽爽爽免费视频网 | 亚洲国产欧美精品一区二区三区 | 亚洲精品第一区二区三区 | 青草青99久久99九九99九九九 |