本記事では、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ツール複製用の一時テーブルその他の一時テーブルgh-ost _{元のテーブル名}_gho_{元のテーブル名}_del _{元のテーブル名}_ghcpt-osc _{元のテーブル名}_new_{元のテーブル名}_old Alibaba Cloud 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ステートメントに戻すことで、データ送信元とデータ送信先の最終的なテーブルオブジェクト構造が一致しないことによるデータ移行タスクの中断を回避します。