mysql onlibe all_MySQL Online DDL
雖然FIC可以讓InnoDB存儲(chǔ)引擎免創(chuàng)建臨時(shí)表,從而提高索引創(chuàng)建的效率。但正如前面所說,索引創(chuàng)建時(shí)會(huì)阻塞表上的DML操作。OSC雖然解決了上述的部分問題,但是還是有很大的局限性。MySQL5.6版本可以支持Online DDL(在線數(shù)據(jù)定義)操作,其允許輔助索引創(chuàng)建的同時(shí),還允許其他諸如INSERT UPDATE DELETE這類的DML操作。這幾大提高了MySQL數(shù)據(jù)庫(kù)在生產(chǎn)環(huán)境中的可用性
此外,不僅是輔助索引,以及這幾類的DDL操作都可以通過在線的方式進(jìn)行操作
輔助索引的創(chuàng)建與刪除
改變自增長(zhǎng)值
添加或刪除外鍵約束
列的重命名
通過新的ALTER TABLE語法,用戶可以選擇索引的創(chuàng)建方式:
ALGORITHM指定了創(chuàng)建或刪除索引的算法,COPY表示按照MySQL5.1版本之前的工作模式,即創(chuàng)建臨時(shí)表的方式.INPLACE表示索引創(chuàng)建或刪除操作不需要?jiǎng)?chuàng)建臨時(shí)表。DEFAULT表示根據(jù)參數(shù)old_alter_table來判斷是通過INPLACE還是COPY的算法,該參數(shù)的默認(rèn)值為OFF,表示采用INPLACE的方式
LOCK部分為索引創(chuàng)建或刪除時(shí)對(duì)表添加鎖的情況 可有的選擇為:
a)NONE
執(zhí)行索引創(chuàng)建或刪除操作時(shí),對(duì)目標(biāo)表不添加任何的鎖,即事務(wù)依然可以進(jìn)行讀寫操作,不會(huì)有收到阻塞。因此這種模式可以獲得更大的并發(fā)度
b)SHARE
這和之前的FIC類似,執(zhí)行索引創(chuàng)建或刪除操作時(shí),對(duì)目標(biāo)表加上一個(gè)S鎖。對(duì)于并發(fā)的讀事務(wù),依然可以執(zhí)行,但是遇到寫事務(wù),就會(huì)發(fā)生等待操作,如果存儲(chǔ)引擎不支持SHARE模式,會(huì)返回一個(gè)錯(cuò)誤信息
c)EXCLUSIVE
在這個(gè)模式下,執(zhí)行索引創(chuàng)建或刪除操作時(shí),對(duì)目標(biāo)表加上一個(gè)X鎖。讀寫事務(wù)都不能進(jìn)行。因此會(huì)阻塞所有的線程。這和COPY方式運(yùn)行得到的狀態(tài)類似。但不需要像COPY那樣創(chuàng)建一張臨時(shí)表
d)DEFAULT
首先會(huì)判斷當(dāng)前的操作是否使用了NONE模式,若不能則判斷是否使用SHARE模式,最后判斷是否使用了EXCLUSIVE模式也就是說DEFAULT會(huì)通過判斷事務(wù)的最大并發(fā)性來判斷執(zhí)行DDL模式
InnoDB存儲(chǔ)引擎實(shí)現(xiàn)Online DDL的原理是在執(zhí)行創(chuàng)建或刪除操作的同時(shí),將INSERT/UPDATE/DELETE這類的DML操作日志寫入到一個(gè)緩存中。待完成索引創(chuàng)建后再重做應(yīng)用到表上。以此達(dá)到數(shù)據(jù)的一致性。這個(gè)緩存大小由innodb_online_alter_log_max_size控制,默認(rèn)128MB。若用戶更新的表比較大,在創(chuàng)建過程中伴有大量的寫事務(wù),如遇到innodb_online_alter_log_max_size的空間不能存放日志是,會(huì)拋出
對(duì)于這個(gè)操作,可以跳大參數(shù)innodb_online_alter_log_max_size,一次獲得更大的日志緩存空間。此外,還可以設(shè)置ALTER TABLE的模式為SHARE。這樣在執(zhí)行過程中就不會(huì)有寫事務(wù)發(fā)生。因此不需要進(jìn)行DML日志的記錄
需要特別注意,由于Online DDL在創(chuàng)建索引完成后在通過重做日志達(dá)到數(shù)據(jù)庫(kù)的最終一致性。這意味著在索引創(chuàng)建過程中,SQL優(yōu)化器不會(huì)選擇正在創(chuàng)建中的索引
總結(jié)
以上是生活随笔為你收集整理的mysql onlibe all_MySQL Online DDL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这条裙子到底是白金,还是蓝黑?微博已吵疯
- 下一篇: 修复划痕多少钱啊?