本記事では、Online DDLとは何か、Online DDLツールの使用制限、データ移行タスクへの影響、および対応策について説明します。
背景
Online DDLは、ロックフリー構造変更とも呼ばれ、データベースの仕組み上、一部の構造変更を実行する際にテーブルロックが発生し、業務がブロックされる問題を解決するためのものです。gh-ost、pt-osc、Alibaba Cloud DMSなど、Online DDLをサポートする汎用ツールでは、ロックフリー構造変更の主な処理原則は以下の通りです:
ソーステーブルと構造が一致する一時テーブルを作成します。
構造変更DDLを適用し、一時テーブルの構造を変更します。
ソーステーブルのデータを一時テーブルに全量コピーします。
ソーステーブルと一時テーブルのデータが一致するまで、ソーステーブルのデータを一時テーブルに増分同期します。
ソース側を削除対象テーブルに、一時テーブルをソーステーブルにリネームします。
上記の方式により、Online DDLツールは大量データの場合でも、ソース側を長時間ロックすることによる業務への障害を効果的に解消できます。
使用制限
現在のバージョンでは、ソース側がMySQLデータベースであり、Alibaba Cloud DMS、gh-ost、またはpt-oscを使用してロックフリー構造変更操作を実行するシナリオのみをサポートしています。
Online DDLツールの対応は、Online DDLのステートメントをユーザーのDDLステートメントに復元するものであり、ユーザーのDDLステートメントがターゲット側で実行される際に遭遇するテーブルロック問題を解決することはできません。ターゲット側のデータベースタイプのDDLサポートレベルを評価してください。
Online DDLツールの対応を有効にした設定を選択すると、それ以降に実行されるOnline DDLにのみ有効になります。Online DDLツールの対応を有効にする設定を行う前に実行されたOnline DDLは元の動作を維持し、データ移行タスクに異常が発生する可能性があります。
Online DDLツールは、ルールに基づいてOnline DDLツールの一時テーブルのセマンティクスに合致するテーブルオブジェクトをフィルタリングします。お客様の業務テーブルがOnline DDLツールの一時テーブルのセマンティクスに合致する場合、同様にフィルタリングされ、データ移行が予想通りに行われない可能性があります。各ツールの一時テーブルのルールは以下の通りです。
Online DDLツール鏅像一時テーブルその他の一時テーブルgh-ost _{元のテーブル名}_gho _{元のテーブル名}_del
_{元のテーブル名}_ghcpt-osc _{元のテーブル名}_new _{元のテーブル名}_old DMS ロックフリー構造変更 tp_{変更ID}_ogt_{元のテーブル名}
tp_{変更ID}_g_{元のテーブル名}tp_{変更ID}_ogl_{元のテーブル名}
tp_{変更ID}_l_{元のテーブル名}
tp_{変更ID}_del_{元のテーブル名}
tp_{変更ID}_d_{元のテーブル名}
データ移行タスクへの影響
ソース側でOnline DDLが発生した場合、移行オブジェクトの選択範囲によって、データ移行タスクに異なる影響が生じます。
移行テーブルオブジェクトの選択がOnline DDLによって生成された一時テーブルをカバーしていない場合
トリガーシナリオ:通常、データ移行タスクでは、オブジェクトの選択に指定オブジェクト方式、またはマッチングルール方式のセマンティクスを使用しますが、これらの方法では一時テーブルがカバーされていません。
影響:データ移行機能が一時テーブルの作成、構造変更、リネーム操作をターゲット側に完全にコピーしていないため、ソース側とターゲット側のテーブル構造が一致しなくなり、タスクが中断する問題が発生します。
移行テーブルオブジェクトの選択がOnline DDLによって生成された一時テーブルをカバーしている場合
トリガーシナリオ:通常、データ移行タスクでオブジェクトを選択する際にマッチングルール方式を使用し、そのマッチングルール方式のセマンティクスが一時テーブルをカバーしている場合。
影響:データ移行は、ソース側のロックフリー構造変更アクションを完全にコピーします。これには、ソース側の一時テーブルに対する多数のDMLも含まれます。このシナリオではタスクの正常な実行には影響しませんが、大量のデータ同期が発生し、パフォーマンスに影響します。
データ移行タスクの適応策
データ移行は、コンソールページでOnline DDLツールの適用を有効にするかどうかの機能を提供しています。有効に選択した後、データ移行のバックグラウンドでは以下の操作を実行します。
フィルター条件を設定し、Online DDLツールの一時テーブルのセマンティクスに合致するすべてのテーブルオブジェクトをフィルタリングし、ターゲット側に同期しません。
ソース側の変更された一時テーブルのDDLを保存し、ソース側のロックフリー構造変更が完了したことを検出すると、ターゲット側のソーステーブルに構造変更DDLを適用します。
上記の動作により、以下の2つの問題を解決できます。
一時テーブルのDMLとDDLをフィルタリングすることで、無効なテーブルオブジェクト転送がデータ移行タスクのパフォーマンスに与える影響を低減します。
Online DDLのステートメントをユーザーのDDLステートメントに復元することで、ソース側とターゲット側の最終的なテーブルオブジェクト構造の不整合によるデータ移行タスクの中断を防ぎます。