成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL Online DDL,還是要謹(jǐn)慎

數(shù)據(jù)庫 MySQL
本文也不討論非InnoDB引擎以及非普通索引(如全文索引、空間索引)的場景。我們先看下ALTER TABLE時ALGORITHM可以指定的幾種方式。

 

導(dǎo)讀

MySQL的Online DDL長期飽受詬病,8.0之后有沒有好一些呢...

本文重點(diǎn)討論常見的幾種Online DDL需求:

  • 增加新列(ADD COLUMN)
  • 修改列定義(MODIFY COLUMN)
  • 增加/刪除索引(ADD/DROP INDEX)

其他的DDL操作相對比較少,所以本文就不討論了。

此外,本文也不討論非InnoDB引擎以及非普通索引(如全文索引、空間索引)的場景。

我們先看下ALTER TABLE時ALGORITHM可以指定的幾種方式:

  • COPY ,是指DDL時,會生成(臨時)新表,將原表數(shù)據(jù)逐行拷貝到新表中,在此期間會阻塞DML
  • INPLACE,無需拷貝全表數(shù)據(jù)到新表,但可能還是需要IN-PLACE方式(原地,無需生成新的臨時表)重建整表。這種情況下,在DDL的初始準(zhǔn)備和最后結(jié)束兩個階段時通常需要加排他MDL鎖(metadata lock,元數(shù)據(jù)鎖),除此外,DDL期間不會阻塞DML
  • INSTANT,只需修改數(shù)據(jù)字典中的元數(shù)據(jù),無需拷貝數(shù)據(jù)也無需重建整表,同樣,也無需加排他MDL鎖,原表數(shù)據(jù)也不受影響。整個DDL過程幾乎是瞬間完成的,也不會阻塞DML。這個新特性是8.0.12引入的,再次感謝騰訊互娛DBA團(tuán)隊(duì)的貢獻(xiàn)

執(zhí)行DDL操作時,ALGORITHM選項(xiàng)可以不指定,這時候MySQL按照INSTANT、INPLACE、COPY的順序自動選擇合適的模式。也可以指定ALGORITHM=DEFAULT,也是同樣的效果。如果指定了ALGORITHM選項(xiàng),但不支持的話,會直接報錯。

當(dāng)采用COPY模式時,這時表里任何的修改數(shù)據(jù)操作,DDL都會被阻塞。COPY模式下會生成臨時新表,操作完成后原表會被刪除,新表被重命名為原表名。當(dāng)DDL開始后,原表上僅能只讀,其他的DML操作也都會被阻塞。COPY過程中,唯一會阻塞只讀的時機(jī)是在清理舊表結(jié)構(gòu)和表定義緩存時。

1、以下是支持INPLACE模式的幾種情況:

  • 本身是InnoDB表支持的online DDL操作
  • 表重命名
  • 以下幾種只修改表元數(shù)據(jù)而不修改表數(shù)據(jù)的操作
    • 字段類型為CHAR、VARCHAR、TEXT、ENUM
    • 字符集從UTF8MB3變成UTF8MB4,或者從其他任何字符集改成binary
    • 修改字符集的字段上沒有索引
    • 字段重命名
    • 修改字段默認(rèn)值
    • 索引重命名
    • 新增、刪除輔助索引
    • 修改索引的可見性
    • ENUM/SET類型字段追加新值,例如('a','b')后面增加'c',變成('a','b','c')
    • 從8.0.14開始,下面幾種只修改字符集的情況
    • 從8.0.14開始,InnoDB表虛擬列(generated column)上不修改定義類型、表達(dá)式、是否允許為NULL約束,例如只修改字段備注內(nèi)容(特么的這有卵用啊)
    • 修改字段的默認(rèn)值,且該字段不包含在生成虛擬列的表達(dá)式內(nèi),例如只修改字段的NULL屬性

2、以下是支持INSTANT模式的幾種情況:

  • 在表最后新增一個字段
  • 新增或刪除虛擬列
  • 新增或刪除字段默認(rèn)值
  • 修改ENUM/SET字段定義,上面也有提到過
  • 修改索引類型
  • 表重命名

3、幾種需要用COPY模式的情況

當(dāng)執(zhí)行ALTER TABLE ADD COLUMN、CHANGE COLUMN、MODIFY COLUMN、ADD INDEX、FORCE 等操作時,會將5.5版本之前的時間類型相關(guān)字段強(qiáng)制升級到高版本,這個升級需要重建整個表,只能用COPY方式。這時如果指定 ALGORITHM=INPLACE 就會報錯了。

當(dāng)有聯(lián)合索引并用于表分區(qū)時,如果修改了聯(lián)合索引列順序的話,也需要用COPY模式。

4、最后用一個表格說明幾種常見操作的模式

操作 Instant In Place 重建表 可并行DML 只修改元數(shù)據(jù)
新增輔助索引
刪除輔助索引
修改索引名
新增主鍵
刪除主鍵
刪除并同時新增主鍵
新增字段 是(追加式)
刪除字段
修改字段數(shù)據(jù)類型
擴(kuò)展VARCHAR列長度
新增STORED虛擬列
新增VIRTUAL虛擬列
轉(zhuǎn)換表字符集
opitmize table
修改表名

最后有兩個提醒

一般DDL操作最好都采用pt-osc或gh-ost這樣的工具來實(shí)施,并且實(shí)施之前務(wù)必要先檢查當(dāng)前目標(biāo)表上是否有事務(wù)或大查詢未結(jié)束,避免嚴(yán)重的MDL鎖等待

除了8.0以上版本,除了追加式新增列、表改名、新增虛擬列這三種支持INSTANT的操作可以直接跑DDL,其余的都統(tǒng)統(tǒng)采用pt-osc/gh-osc工具,相對更不容易出狀

執(zhí)行ALTER TABLE DDL時,不要節(jié)外生枝指定ALGORITHM=?, LOCK=?選項(xiàng),因?yàn)镸ySQL會自行判斷該采用哪種方式。本來可以INPLACE的,可能不小心給指定成COPY就悲劇了

 

責(zé)任編輯:龐桂玉 來源: 數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2023-06-12 09:09:19

MySQLDDLNSTANT

2018-03-02 11:54:10

蘋果MWC喬布斯

2021-08-03 14:40:06

智能手機(jī)系統(tǒng)硬件

2018-05-29 10:54:53

AI

2025-05-27 07:00:00

AI工具GenAI人工智能

2011-03-31 16:12:42

移動操作系統(tǒng)中國

2009-11-17 09:41:49

程序員的學(xué)歷

2017-07-07 17:11:21

MySQLDDL操作視圖

2022-09-20 10:44:06

MySQL 8.0數(shù)據(jù)庫DDL

2009-08-10 16:57:21

Lambda表達(dá)式

2021-03-08 16:08:21

AIOps工具開源

2020-12-16 05:54:18

充電寶信息安全

2019-03-17 17:00:41

物聯(lián)網(wǎng)安全物聯(lián)網(wǎng)IOT

2010-12-01 11:08:43

職場

2009-02-19 20:36:30

VistavLite副作用

2012-02-07 17:20:13

噴墨打印機(jī)推薦

2022-06-07 23:33:53

數(shù)字化轉(zhuǎn)型企業(yè)轉(zhuǎn)型數(shù)字化

2020-02-17 21:17:40

www域名主機(jī)

2012-08-30 15:21:46

搜索

2023-08-14 08:32:42

MySQL數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄色片免费看视频 | 亚洲一一在线 | 一级毛片免费看 | 一区二区免费 | 亚洲自拍偷拍免费视频 | 精品久久久久久红码专区 | 最新黄色毛片 | 中文字幕在线不卡 | 国产欧美日韩综合精品一区二区 | 日韩在线免费视频 | 九九在线视频 | 女女爱爱视频 | 国产成人高清 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕国 | 欧美日韩国产一区二区三区不卡 | 一区二区三区四区国产 | 99精品一区二区 | 亚洲视频自拍 | av一二三区 | 精品国产乱码 | 欧美一级黄色免费看 | h在线播放 | 亚洲一区中文字幕 | 91精品久久久久久久久久入口 | 久久精品在线播放 | 日韩视频在线免费观看 | 亚洲精品久久久久久宅男 | 亚洲成人网在线 | 欧美一区二区三区小说 | 一级黄色在线 | 国内自拍视频在线观看 | 中国一级特黄毛片大片 | 伊人超碰| 国产美女福利在线观看 | 91视频观看 | 国产精品久久久久久av公交车 | 日韩欧美一级片 | 一色一黄视频 | 嫩草视频在线 | 91在线看片 |