600GBテーブルのインデックス付きキーデータ型をINTからBIGINTに変更する最速の方法


12

600GB MySQLテーブルでデータ型をINTからBIGINTに変更する必要があります。列には一意のインデックスがあります。私は無署名のINTで良いかもしれませんが、それを変更するか、BIGINTを変更することはほとんど同じ痛みだと思います。テーブルのエンジンはInnoDBです。簡単になるもの:

  1. 他の机
  2. 構造のコピーと INSERT INTO (SELECT *)
  3. テーブルのダンプとダンプファイルテーブル定義の変更
  4. 他に何か?

更新:要求どおり、MySQLバージョン5.5.15、外部キーなし、テーブル作成:

 CREATE TABLE `tbl` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_id` int(11) NOT NULL,
    `created_at` datetime NOT NULL,
    `tid` bigint(20) NOT NULL,
    `t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `f` tinyint(1) NOT NULL,
    `i_id` bigint(20) NOT NULL,
    `ir_id` int(11) NOT NULL,
    `r_c` int(11) NOT NULL,
    `r` tinyint(1) NOT NULL,
    `e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `t` varchar(5) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `user` (`user_id`,`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=1657146169 DEFAULT CHARSET=utf8

痛みを定義し、最短時間を費やしてください....?最速の結果?

@AlecTeal最短時間を取ります
ノーム

それは質問に答えず、この質問はテーブルが大きくなる前におそらく議論されましたが、このテーブルのサイズを小さくする方法も探します。

1
MySQLのどのバージョンですか?いくつかのバージョンが持っているようにそれは重要ALTER TABLE ONLINEです。この列を参照する外部キーはありますか?SHOW CREATE TABLE tablename;出力を表示すると役立ちます。
ypercubeᵀᴹ

2
短いフィールド名がテーブルサイズの削減に役立つ場合、600 MBになります。
すべての取引のジョン

回答:


2

テーブルにトリガーがないと仮定すると、pt-online-schema-changeロックせずにテーブルを変更できるため、使用を検討する必要があります。

テーブルのサイズを考えると、まだかなりの時間がかかります。

また、この方法ALTER TABLEでは、テーブルの再構築中にテーブルの2つのコピーをサポートするために、600 GBの追加ディスク領域があることを確認する必要があります。


時間の見積もりはありますか?(それは多くの要因に依存することを知っていますが、もしあなたが推測しなければならなかったら、範囲はどうなるでしょう)
ノーム

@Noam、テーブルをコピーする必要はありません。変更テーブルを使用する場合、最悪のケースはコピーすることです。成熟したエンジンを使用している場合、それはそれ自体に以前のもの(ファイル内の場所またはレコード)がintを使用し、ポストがbigintを使用することをメモします最適化する。

@AlecTealそれについて正式な言及はありますか?
ノーム

@Noamは私の答えを見る。

1
@Noam実行に24〜96 ALTER TABLE時間かかる可能性があります。テスト環境でALTER TABLEを実行すると、より適切な推定値を取得できます。
アイクウォーカー

2

perconaツールキットpt-online-schema-changeを使用することは、使用に影響を与えずに実稼働環境で選択することです。これにより、いくつかのトリガーが追加され、デルタと、これが行われた後に名前が変更されるテンポラルテーブルが取得されます。

例:

pt-online-schema-change --alter "CHANGE `id` `id` BIGINT  NOT NULL; " D=DB,t=TABLE

ptは進むべき道です。@Noam FYI:このテーブルで書き込みアクティビティが非常に多いEC2インスタンスに多数の行がある〜270GBテーブルでのINT-> BIGINT移行には、pt-online-schema-changeを使用して64時間かかりました。
ヤクブグワジク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.