スマートスタイル TECH BLOG

データベース&クラウド技術情報

MySQL 8.0 の INSTANT DDL について

MySQL 8.0.12 はマイナーバージョンアップですが、ALTER TABLE でカラムを追加する際のアルゴリズムに「INSTANT」が追加されました。

MySQL 8.0: InnoDB now supports Instant ADD COLUMN | MySQL Server Blog

ALGORITHM=INSTANT とは?

従来の「COPY」や「INPLACE」と異なり、メタデータの更新だけ行うことで高速かつ負荷をかけずにカラムの追加などが行えるようになりました。

ただし、使える範囲は限定的で下記のような操作のみになります。

  • インデックスオプションの変更
  • テーブル名の変更
  • SET/DROP DEFAULT
  • MODIFY COLUMN
  • virtual column の追加、削除
  • カラム追加(制限あり)

カラム追加であっても、以下のような制限があります。

  • INSTANTアルゴリズムがサポートされていないものと組む合わせて使えません
  • テーブルの最後の列以外に追加する場合は使用できません
  • ROW_FORMAT=COMPRESSED の場合は使用できません
  • FULLTEXTインデックスを含むテーブルでは使用できません
  • 一時テーブルには使用できません
  • データディクショナリテーブルには使用できません
  • 行サイズ制限はカラム追加時に評価されません

ALTER TABLE で ALGORITHM を指定しない場合、INSTANT -> INPLACE -> COPY の順にトライしていきます。

MySQL :: MySQL 8.0 Reference Manual :: 15.12.1 Online DDL Operations

アルゴリズムによる速度差を検証する

ここではテストデータを使ってアルゴリズムの違いによる速度差を計測していきたいと思います。

テストデータの作成

ベンチマークツールの sysbench を使って100万件のデータを投入しました。

カラムを追加する

COPY アルゴリズム

実行完了まで 21.70 秒かかりました。

INPLACE アルゴリズム

実行完了まで 6.54 秒と COPY アルゴリズムに比べるとかなり高速です。

INSTANT アルゴリズム

実行完了まで 0.05秒 になりました。

default を含む場合のカラム追加で INSTANT アルゴリズム

0.11秒と相変わらず高速でした。

データを見るとちゃんとデフォルト値が入っています。

カラム追加にかかった時間を比較すると以下の通りです。

アルゴリズム 処理時間
COPY 21.70 秒
INPLACE 6.54 秒
INSTANT 0.05 秒

対応していない操作で INSTANT を指定した場合

INSTANT アルゴリズムに対応していない DROP COLUMN でこのアルゴリズムを指定した場合

フォールバックして COPY や INPLACE が使われるわけではなくエラーを出力して停止してくれました。

まとめ

MySQL 5.6 からオンラインDDLに既に対応していましたが、レコード数が非常に多いテーブルなどではDDL実行中の負荷や実行時間を考慮して、負荷の少ない夜間やメンテナンスを入れて実行するといった運用も多いと思います。
MySQL 8.0.12 から追加された INSTANT アルゴリズムを使うことで、そういった運用面での負担から解放されると考えられます。


MySQL

 

Return Top