一 簡介:今天來DDL的變革
二 DDL演化方式:
1 copy table : 1 創建臨時表2 copy數據到臨時表 3 rename進行交換 缺點 1 阻塞事務 2占用磁盤空間
2 inplace : 1 在線更改表,不會拷貝臨時表 缺點 1 阻塞事務
3 online_ddl :1 在線更改表,不會拷貝臨時表 優點 1 不會阻塞事務
因此MySQL最新版本中,InnoDB支持了所謂的Online方式DDL。與以上兩種方式相比,online方式支持DDL時不僅可以讀,還可以寫,對於dba來說,這是一個非常棒的改進。
三 DDL 耗時排行
1 針對 索引的DDL操作
特點:耗時少,表的數據量大,也不會很長時間,(隨着表數據量的增多,加索引的速度會變得越來越慢)
在線變更: 支持->inplace方式->不會阻塞事務
特殊情況:針對全文索引要特殊對待
2 針對 列的DDL操作(不包含主鍵)
特點:耗時長,表的數據量大,時間會非常長
在線變更: 支持
add column->inplace 方式->不會阻塞事務, 時間可能很長
delete column -> inplace 方式->不會阻塞事務, 時間可能很長
change->copy 方式->會阻塞事務 , 時間可能很長
設置 修改 column默認值->inplace 方式 ->不會阻塞事務,時間很快,直接修改frm文件
設置 colunm not null/null->inplace 方式->不會阻塞事務,時間可能很長
設置clounm current on update -> inplace 方式->不會阻塞事務,時間很短
drop column ->inplace 方式 ->不會阻塞事務,時間可能很長
3 針對主鍵的DDL操作
特點:耗時長,只針對特定場景進行操作
在線變更: 支持
add primary->inplace 方式->不會阻塞事務,時間可能很長
drop primary->copy 方式->會阻塞事務,時間可能很長
刪除並添加主鍵->inplace 方式->不會阻塞事務,時間可能很長,而且必須在同一alter語句上
4 其他特殊操作
1 更改表的字符集 方式->copy,會阻塞事務,時間可能很長
2 整理表空間 方式->inplace,不會阻塞事務(alter table engine=innodb)
四 總結
1 對於針對主鍵和列的更改操作建議采用pt-osc操作
2 針對myisam的表操作
1 都需要copy to tmp table 這點要尤為注意,上面分析的都是innodb的操作
2 由於myisam也支持觸發器,所以可以用pt-osc進行操作