MariaDB10.3 增補AliSQL補丁---安全執行Online DDL

Online DDL從名字上看很容易誤導新手,以爲不論什麼情況,修改表結構都不會鎖表,理想很豐滿,現實很骨感,注意這個坑!


有以下兩種情況執行DDL操作會鎖表的,Waiting for table metadata lock(元數據表鎖)

1、增加、刪除字段或索引不會鎖全表,刪除主鍵、更改字段屬性會鎖全表,見下圖所示:圖片.png


2、在添加字段alter table表時,對該表的增、刪、改、查均不會鎖表。而在這之前,該表有被訪問時,需要等其執行完畢後,纔可以執行alter table例如在會話一,故意執行一條大結果的查詢,然後在會話二執行增加字段age,此時還會出現表鎖,如下圖所示:

圖片.png


針對第二種情況,MariaDB10.3 增補AliSQL補丁-DDL FAST FAIL,讓其DDL操作快速失敗。

語法爲:

ALTER TABLE tbl_name [WAIT n|NOWAIT] ...
CREATE ... INDEX ON tbl_name (index_col_name, ...) [WAIT n|NOWAIT] ...
DROP INDEX ... [WAIT n|NOWAIT]
DROP TABLE tbl_name [WAIT n|NOWAIT] ...
LOCK TABLE ... [WAIT n|NOWAIT]
OPTIMIZE TABLE tbl_name [WAIT n|NOWAIT]
RENAME TABLE tbl_name [WAIT n|NOWAIT] ...
SELECT ... FOR UPDATE [WAIT n|NOWAIT]
SELECT ... LOCK IN SHARE MODE [WAIT n|NOWAIT]
TRUNCATE TABLE tbl_name [WAIT n|NOWAIT]


例:

圖片.png

如果線上有某個慢SQL對該表進行操作,可以使用WAIT n(以秒爲單位設置等待)或NOWAIT在語句中顯式設置鎖等待超時,在這種情況下,如果無法獲取鎖,語句將立即失敗。 WAIT 0相當於NOWAIT。


參考:https://jira.mariadb.org/browse/MDEV-11388





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章