Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


14.11.9 オンライン DDL の制限

オンライン DDL 操作を実行する場合は、次の制限を考慮に入れてください。

  • テーブルをコピーするオンライン DDL 操作中に、ファイルは一時ディレクトリ (Unix では $TMPDIR、Windows では %TEMP%、または --tmpdir 構成変数で指定されたディレクトリ) に書き込まれます。各一時ファイルは、新しいテーブルまたはインデックス内に 1 つのカラムを保持できるだけの十分な大きさを持ち、最終的なテーブルまたはインデックスにマージされたらすぐに削除されます。

  • どちらも同じインデックスを指定する DROP INDEX および ADD INDEX 句を含む ALTER TABLE ステートメントは、高速インデックス作成ではなくテーブルコピーを使用します。

  • TEMPORARY TABLE でインデックスを作成した場合は、高速インデックス作成が使用されるのではなく、テーブルがコピーされます。これは MySQL Bug #39833 としてレポートされています。

  • InnoDB は、外部キーに必要なインデックスをユーザーが削除しようとしたときにエラー事例を処理します。エラー 1553 に関連した詳細は、セクション14.19.5「InnoDB のエラーコード」を参照してください。

  • ALTER TABLE の句 LOCK=NONE は、テーブル上に ON...CASCADE または ON...SET NULL 制約が存在する場合は許可されません。

  • オンライン DDL の各 ALTER TABLE ステートメント中に、LOCK 句には関係なく、テーブルに対する排他的ロック (LOCK=EXCLUSIVE 句で指定されるのと同じ種類のロック) を必要とする短い期間が最初と最後に存在します。そのため、そのテーブル上で挿入、更新、削除、または SELECT ... FOR UPDATE を実行している長時間実行されるトランザクションが存在する場合は、オンライン DDL 操作が開始前に待機する可能性があります。また、ALTER TABLE の進行中に同様の長時間実行されるトランザクションが開始された場合は、オンライン DDL 操作が完了前に待機する可能性があります。

  • オンライン ALTER TABLE 操作の実行時に、ALTER TABLE 操作を実行しているスレッドは、その同じテーブルに対してほかの接続スレッドから同時に実行された DML 操作のオンラインログを適用します。これらの DML 操作が適用されると、重複したキーエントリのエラー (ERROR 1062 (23000): 重複したエントリ) が発生する可能性があります。これは、重複したエントリが一時的なだけで、オンラインログのあとの方のエントリによって元に戻されるとしても同じです。これは、トランザクション中は制約を保持する必要のある、InnoDB での外部キー制約チェックの考え方に似ています。

  • InnoDB テーブルに対する OPTIMIZE TABLE は、テーブルを再構築して、インデックス統計を更新し、クラスタ化されたインデックス内の未使用領域を解放するための ALTER TABLE 操作にマップされます。5.6.17 より前は、この操作に対するオンライン DDL のサポートはありません。主キーに現れる順序でキーが挿入されるため、セカンダリインデックスはそれほど効率的に作成されません。5.6.17 の時点では、InnoDB の通常のテーブルとパーティション化されたテーブルを再構築するためのオンライン DDL のサポートの追加によって、OPTIMIZE TABLE がサポートされます。詳細は、セクション14.11.1「オンライン DDL の概要」を参照してください。

  • MySQL 5.6 より前に作成された InnoDB テーブルは、一時的なカラム (DATEDATETIME、または TIMESTAMP) を含み、かつ ALTER TABLE ... ALGORITHM=COPY を使用して再構築されていないテーブルに対する ALTER TABLE ... ALGORITHM=INPLACE をサポートしていません。この場合は、ALTER TABLE ... ALGORITHM=INPLACE 操作によって次のエラーが返されます。

    ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. 
    Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.