web-dev-qa-db-ja.com

テーブルの名前を変更するのにかかる時間

サイズが219 GBのテーブルの名前を変更するにはどのくらい時間がかかりますか?

これは私たちのサーバーの仕様です:

  • メモリ:65 GB
  • 利用可能なディスク容量:266 GB

MySQL Ver 14.12 Distrib 5.0.77

混乱させて申し訳ありません。私たちの計画は、219 GBのサイズのMySQLテーブルの名前を変更することです。どのくらい時間がかかりますか?この移行には大きなディスク容量が必要ですか?

テーブルのエンジン:InnoDB

6
Katrina

MySQLでテーブルの名前を変更するには、一時テーブルは必要ありません。

同等の操作を実行する2つのステートメントがあります。

RENAME TABLE t1 TO t2;
ALTER TABLE t1 RENAME TO t2; # as long as no other options to ALTER are also specified

テーブルの名前を変更すると、テーブルに対するメタデータロックが取得されます。このため、テーブルに対してステートメントが実行されておらず、トランザクションに行ロックがなく、トランザクションがテーブルのMVCCバージョンの一貫したスナップショットを保持していません。

どちらのスタイルのRENAME操作でもメタデータロックを取得しようとし、テーブルに影響を与える後で開始されるステートメントはブロックされ、保留中のメタデータロックを待ちます。

他のオプションなしでALTER TABLE tbl_name RENAME TO new_tbl_nameを使用すると、MySQLはコピーを作成せずにテーブルtbl_nameに対応するファイルの名前を変更するだけです。

http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

これは5.0のドキュメントへのリンクであり、5.1、5.5、5.6、5.7はすべて同じ情報を持っています。

ロックがすぐには必要ないため、表示される可能性のある大きな遅延は、RENAMEの開始を妨げている他のセッションによるものです。

FLUSH TABLES table_name; ステートメントを実行して数秒以内に戻ることができる場合、それは名前変更操作が同じ時間内に完了することの確認として役立つはずです。テーブルに関連するクエリキャッシュ内のエントリを削除し、テーブルを閉じ、テーブル共有オブジェクトなどの内部構造をクリーンアップするには、同じロックが必要です...テーブルは、それにアクセスする次のステートメントによって自動的に再度開かれます。 ..したがって、通常、実際の名前変更操作は、名前変更に必要な作業が少なくなるため、実際の名前変更操作が少し短くなるため、何を期待するかについての適切なテストを提供し、最初に実行することをお勧めします。

SHOW FULL PROCESSLIST;FLUSHの完了を待機している間(遅延がある場合)は、名前変更操作の邪魔になる可能性があることを把握でき、安全にKILL必要に応じてフラッシュ。

12

MySQLのドキュメントは http://dev.mysql.com/doc/refman/5.6/en/rename-table.htmlabout SQLを参照

RENAME table a TO b

かなり最悪のように見えますが、それは正確に

RENAMEを実行すると、ロックされたテーブルやアクティブなトランザクションを持つことができなくなります。また、元のテーブルに対するALTER権限とDROP権限、および新しいテーブルに対するCREATE権限とINSERT権限も必要です。

これを読んだ場合、MySQLは新しいテーブルbを作成し、テーブルaからテーブルbにデータをコピー(INSERT)してテーブルを削除する必要があるようです。

SQLコマンドの背後にあるMySQL 5.0.77のソースコードを分析しました

RENAME table a TO b

そしてそれはほとんど代わりの操作のように見えます

  1. .frm(テーブル定義ファイル)
  2. .trg(トリガーファイル)

ファイルを変更する(名前を変更する)必要はありません。テーブル間で実際のデータをコピーする必要はありません。

0
Raymond Nijland