Online DDL / MySQL
MySQLにおけるOnline DDLの実装と注意点
View on GitHub
MySQL Online DDL - Kaminashi Developer Blog
ALTER TABLE `comments`
ADD INDEX idx_comments_search (`user_id`, `del`, `comment`, `created_at`)
ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE 実行時のロックモード
MySQL 5.7 の InnoDB テーブルでは、ほとんどの ALTER TABLE 操作が テーブル全体のロックを取得 します。 特に インデックスの追加 (ADD INDEX) や削除 (DROP INDEX) では、テーブルの 書き込み (INSERT, UPDATE, DELETE) がブロックされます
Add Index with [email protected]
開発環境で実行時間からProdでの実行時間を類推して実行。おおよそ、大体近似値となった。
実測
stg: 86500 rows => (649.16ms)
推測
prod: 211875 rows => (1.5s)
• ALGORITHM=INPLACE, LOCK=NONE;でのテーブルロックの有無は時間が短すぎて判断できず。 • テーブルロックかかる前提で進めるが安牌かもしれない。 FULLTEXT INDEX FULLTEXT INDEXはOnlineを適用すると、初回はテーブルロックが発生する。 MySQL 8.4 Reference Manual - Online DDL Operations FULLTEXTユーザー定義の列がない場合、 最初のインデックスを追加するとテーブルが再構築されますFTS_DOC_ID。 FULLTEXTテーブルを再構築せずに追加のインデックスを追加できます。
https://dev.mysql.com/doc/refman/8.4/en/innodb-online-ddl-operations.html
Last updated on