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