mysql5 6的online ddl功能測試

2021-09-22 19:23:00 字數 2328 閱讀 4256

online ddl的前身是 innodb fast index creation(5.1和5.5), 5.6裡對這個功能做了擴充套件:

很多alter table的操作繞開了 table copying,支援dml併發操作。

一、online ddl的支援測試:

1、主鍵的增刪

主鍵新增:

支援online ddl,加主鍵過程中支援 併發的dml

主鍵刪除:

不支援online ddl,刪除主鍵過程需要copy table,導致dml被阻塞

2、索引的增刪

1)普通索引

5.5使用新的邏輯(fast index creation),不再copy表,(引數old_alter_table),加快的索引的建立和刪除,

但是會阻塞dml,可以select

5.6中建立和刪除索引不再阻塞dml

2)unique索引

同上 3、欄位的增刪改

新增:(alter table test add hehe2 int default 100)

5.5阻塞 dml,支援select

5.6支援併發dml

刪除:(alter table test drop hehe2)

5.5阻塞 dml,支援select

5.6支援併發dml

修改:只改欄位名:

(alter table test change hehe2 hehe20 int default '100')

5.5阻塞 dml,支援select

5.6支援online ddl,併發dml

修改字段型別:

(alter table test change hehe20 hehe2 varchar(100) default '100')

5.5阻塞 dml,支援select

5.6不再支援online ddl

中的table 14.5列出了詳細的online ddl支援的操作型別,

但是實際上並不需要記憶這麼多:

二、新引入語法:

在5.6中,alter table增加了新的語法:

algorithm [=]

lock [=]

algorithm:

inplace: 不copy table

copy:     copy table

default:

lock:

default:    mysql自己選擇鎖定資源最少的方式

none:      支援select和dml

shared:   支援select,不支援dml

exclusive:不支援select,不支援dml

可以借用這個新增語法測試是否alter table語句支援online ddl:

新建乙個表結構一樣的表,儲存少量的資料:

root:3306:popo>alter table test change hehe2 hehe20 int default '100' ,lock=none;              

error 1846 (0a000): lock=none is not supported. reason: cannot change column type inplace. try lock=shared.

根據提示,這個字段型別修改的alter table不支援併發的dml操作

root:3306:popo>alter table test change hehe2 hehe20 int default 100,  algorithm=inplace;

error 1846 (0a000): algorithm=inplace is not supported. reason: cannot change column type inplace. try algorithm=copy.

同樣 這個alter table 也需要copy table操作。

三、online ddl相關引數和原理:

innodb_online_alter_log_max_size

online ddl的原理是,mysql把在ddl時間內的所有的 插入,更新和刪除操作記錄到乙個日誌檔案,

然後再把這些增量資料應用到相應的表上(等表上的事務完全釋放後),這個臨時日誌檔案的上限值由

innodb_online_alter_log_max_size指定,每次擴充套件innodb_sort_buffer_size的大小 該引數如果太小,

有可能導致ddl失敗,這期間所有的未提交的併發dml操作都會回滾;但是如果太大

會可能會導致後ddl操作最後鎖定表的時間更長(鎖定表,應用日誌到表上)。

每乙個變化的索引或者表都會分配乙個。

參考:

mysql5 6亂碼 mysql5 6亂碼

安裝mysql5.6版本遇到乙個問題,字符集亂碼,如下圖 由於是新安裝的本地資料庫,所以一定是配置的事情,查詢資料庫字符集配置,如下 有兩個是latin1的字符集,本人是window7環境,在網路找了很多資料,都顯示為修改 c program files mysql mysql server 5.6...

編譯mysql5 6 編譯安裝mysql5 6

mysqlwget tar zxvf mysql 5.6.33.tar.gz tar zxvf cmake 2.8.5.tar.gz cd cmake 2.8.5 安裝編譯工具.bootstrap prefix usr local cmake sudo gmake sudo gmake instal...

mysql5 6原始碼 mysql5 6原始碼部署

一.準備環境 環境 centos 7.3 一台 軟體版本 mysql 5.6.39 1.安裝依賴 yum y install autoconf libaio bison ncurses devel 2.建立使用者 groupadd mysql useradd g mysql s sbin nolog...