Online DDL for MySQL
Online DDLとは
データベースのスキーマ(テーブル構造など)を変更するDDL操作を、データベースの可用性を維持したまま、サービスを停止させることなく実行するための機能 通常のDDLは、実行中に操作対象のテーブルをロックし、データの読み書きが一時的にできないようにする
大規模なデータベースでは、ダウンタイムが発生するためこの課題を解決する目的で導入された
Online DDL操作
Online DDLは、主にALTER TABLEステートメントにALGORITHM句とLOCK句を指定することで制御する
ALGORITHM句
どのようにALTER TABLE操作を実行するかを指定する
種類
COPY
新しいテーブルを一時的に作成し、元のテーブルから新しいテーブルにデータをコピーし、その後に元のテーブル削除して置き換える操作をする
オンライン性:最も低い。ロック発生する
確実性は高いが、ディスクI/Oと時間消費が大きい
INPLACE
テーブルをその場で再構築する方式。データコピーはするが、元のテーブルのストレージ領域内でデータの並び替え、インデックスの再構築をする
COPYよりディスクI/Oが少なく、高速。ダウンタイムを軽減できる
INSTANT(MySQL 8.0.12以降)
データの再構築やコピーを一切行わず、テーブルのメタデータのみを変更する方式
オンライン性:最も高い。DML操作を全くブロックしない
LOCK句
....
hr.icon
下記は、Online DDLをサポート対象の操作
各操作のすべてがサポート対象というわけではない。細かい点はDocsを確認 インデックス操作
主キーの操作
カラム操作
生成されたカラム操作
外部キー操作
テーブルの操作
テーブルスペースの操作
パーティション化操作