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