Perconaが作成したpt - online -Schema-Changeツールを導入する前は、オンラインDDLを実現できます。実際、MySQL 5.6バージョンもオンライン DDL機能に追加されていますが、その時間は正常な機能ではなく、DBAが再び極端に使用されることになります。注意、そしてMySQLを放棄するための直接アクセスでさえオンライン変更機能と8.0の継続的な最適化MySQL5.7の出現が付属しています、MySQLにはオンラインDDLがますます完全で安定しています、今日私たちは理解するために協力しています下。
アルゴリズムMySQLオンラインDDL構文の例。たとえば、主キーを追加します。
ALTER TABLE tbl_name ADD PRIMARY KEY(column)、ALGORITHM = INPLACE、LOCK = NONE;その中で、 ALGORITHMに は、 コピー 、 インプレース 、 インスタントの 3つのアルゴリズムがあり ます。
copy:MySQLがこのアルゴリズムを選択すると、操作全体がオフラインになり、DDL実行中に他のDMLステートメントがブロックされます。その間、一時テーブルが作成され、元のテーブルのデータが新しいテーブルにコピーされます。
インプレース:すべての操作は、一時テーブルを経由せずに、innodbエンジンレイヤーで完了します。フルテキストインデックスと空間インデックスの作成を除いて、他のシナリオではDMLを並行して動作させることができます。アルゴリズムは、テーブルを再構築するかどうかに応じて、再構築と再構築なしに分けられます。
再構築には、テーブルの再構築が含まれます。元のテーブルパスの下に新しい.frmファイルと.ibdファイルが生成されます。同時に、行ログスペースを申請して、DDL実行中にDML操作レコードを記録し、最後にコンテンツをやり直します。 DDL送信段階での行ログ。
No-rebuildは、テーブルの再構築を含みません。インデックスを作成および追加するときのセカンダリインデックスの書き込み操作を除いて、他の操作はメタデータ情報を変更するだけで、.ibdファイルを生成せず、行ログスペース。このシナリオは、消費するIOが少なく、高速です。
インスタント:この機能はMySQL 8.0.12で導入されました。データディクショナリのメタデータ情報のみを変更します。データをコピーしたり、テーブルを再構築したりする必要はありません。元のテーブルデータは影響を受けません。DDLプロセス全体が非常に高速に実行され、DML操作をブロックしません。
注意:
DDL操作を実行する場合、通常はALGORITHMを指定する必要はなく、MySQLは内部で変更を行うために使用するメソッドを決定します。
テーブルの再構築を伴う操作の場合、元のテーブルが配置されているディスクの使用法に注意する必要があります。
行ログスペースを申請する操作では、innodb_online_alter_log_max_sizeの値に注意する必要があります。これはデフォルトで128Mであり、行ログの最大値を表し、動的変更をサポートします。スペースの各アプリケーションのサイズは、innodb_sort_buffer_sizeによって決定されます。
24時間営業のテーブルの場合、操作がオンラインビジネスに影響するかどうかわからない場合は、pt-oscツールを使用して変更を実行することをお勧めします。
DDL操作のシーンの分類は、私が オンラインDDLの様々なアルゴリズムについて話しました。すべての操作がオンラインではないので、我々はそれらを区別する必要があります。モードは、MySQLで使用されるさまざまな操作については、私は分類の要約をした。私の希望あなたを助けられる!