婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql Online DDL的使用詳解

Mysql Online DDL的使用詳解

熱門標(biāo)簽:呂梁外呼系統(tǒng) 400電話變更申請 武漢電銷機(jī)器人電話 南太平洋地圖標(biāo)注 北京金倫外呼系統(tǒng) 大豐地圖標(biāo)注app html地圖標(biāo)注并導(dǎo)航 400電話辦理服務(wù)價格最實(shí)惠 催天下外呼系統(tǒng)

正文

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

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

先來看一個常見的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ù)

  1. LOCK=NONE:允許并發(fā)的查詢和DML操作
  2. LOCK=SHARED:允許并發(fā)的查詢,但阻塞DML操作
  3. LOCK=DEFAULT: 由系統(tǒng)決定,允許盡可能多的并發(fā)性(并發(fā)查詢、DML或兩者)。如果省略LOCK子句相當(dāng)于指定LOCK=DEFAULT
  4. LOCK=EXCLUSIVE:阻塞并發(fā)查詢和DML操作。

ALGORITHM參數(shù)

  1. ALGORITHM=COPY:采用拷表方式進(jìn)行表變更,與pt-osc/gh-ost類似;
  2. ALGORITHM=INPLACE:僅需要進(jìn)行引擎層數(shù)據(jù)改動,不涉及Server層;

COPY TABLE流程

  1. 首先建立臨時表,表結(jié)構(gòu)為ALTAR TABLE更改后的結(jié)構(gòu)
  2. 將原表中數(shù)據(jù)導(dǎo)入到臨時表(server層創(chuàng)建臨時表,會有顯示的IBD文件)
  3. 刪除原表
  4. 將臨時表rename為原來的表名

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

IN-PLACE流程

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

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

允許并發(fā)DML的DDL操作

  • 創(chuàng)建/新增二級索引
  • 重命名二級索引
  • 刪除二級索引
  • 改變索引類型(USING {BTREE | HASH})
  • 添加主鍵(expensive cost)
  • 刪除主鍵并增加另一個(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都會造成較高負(fù)擔(dān),同時會導(dǎo)致復(fù)制阻塞,造成另一種形式的從庫復(fù)制延遲,所以如果是大表,建議業(yè)務(wù)低峰期執(zhí)行

不允許并發(fā)DML的DDL操作

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

以上就是Mysql Online DDL的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Mysql Online DDL的使用的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL8.0 如何快速加列
  • MySQL DDL 引發(fā)的同步延遲該如何解決
  • 詳解MySQL8.0原子DDL語法
  • MySQL在線DDL工具 gh-ost的原理解析
  • MySQL ddl語句的使用
  • Mysql DDL常見操作匯總
  • 解析MySQL8.0新特性——事務(wù)性數(shù)據(jù)字典與原子DDL
  • MySQL數(shù)據(jù)定義語言DDL的基礎(chǔ)語句
  • MySQL8.0 DDL原子性特性及實(shí)現(xiàn)原理
  • MySQL在線DDL gh-ost使用總結(jié)
  • 解決MySQL 5.7中定位DDL被阻塞的問題
  • MySQL8.0新特性之支持原子DDL語句
  • MySQL曝中間人攻擊Riddle漏洞可致用戶名密碼泄露的處理方法
  • MySQL 8.0 Online DDL快速加列的相關(guān)總結(jié)

標(biāo)簽:龍巖 徐州 無錫 西寧 南充 自貢 迪慶 麗水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql Online DDL的使用詳解》,本文關(guān)鍵詞  Mysql,Online,DDL,的,使用,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mysql Online DDL的使用詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Mysql Online DDL的使用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 青阳县| 德化县| 宿迁市| 永年县| 溧阳市| 曲阜市| 亳州市| 林甸县| 武清区| 蓬溪县| 安国市| 清远市| 开鲁县| 车险| 黄山市| 昌吉市| 兴安盟| 阳朔县| 慈利县| 永安市| 泽普县| 东山县| 论坛| 东山县| 浑源县| 石首市| 扬中市| 尖扎县| 鹿邑县| 宜宾市| 长丰县| 即墨市| 南漳县| 达拉特旗| 灵石县| 碌曲县| 玛多县| 诸暨市| 黄平县| 正定县| 邵东县|