本記事では、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 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ステートメントに戻すことで、データ送信元とデータ送信先の最終的なテーブルオブジェクト構造が一致しないことによるデータ移行タスクの中断を回避します。