この記事では、主にテーブル単位の復旧の技術原理について説明します。
テーブル単位の復旧の全体的なプロセス
OceanBaseデータベースのテーブル単位の復旧機能は、バックアップデータからユーザーが指定したテーブルを既存のテナントに復旧することで実現されます。この既存のテナントは、元のテーブルが存在していたテナントと同一である場合もあれば、同一クラスタ内の異なるテナントである場合もあり、または異なるクラスタのテナントである場合もあります。
テーブル単位の復旧機能の全体的なプロセスは以下の通りです:
物理的に補助テナントを復旧します。
バックアップおよびアーカイブデータを使用して、指定された時間ポイントまで補助テナントを復旧します。
テナント間でテーブルをインポートします。
指定されたテーブルの構造、データ、および関連するインデックスなどのスキーマを補助テナントからターゲットテナントにインポートします。
補助テナントをクリーンアップし、占有している計算およびストレージリソースを解放します。
テーブル単位の復旧プロセスにおいて、補助テナントはOracleデータベースで使用されるAuxiliary Instanceに似た役割を果たし、テーブル復旧プロセスで消費される追加の計算およびストレージリソースとなります。
テナント間でのテーブルインポートの実装メカニズム
現行バージョンでは、OceanBaseデータベースのテーブル単位の復旧機能は、テナント間でのテーブルインポート段階で3レベルの並列処理メカニズム(L1/L2/L3)をサポートしています。
テーブル単位の復旧機能のテナント間でのテーブルインポートの3レベルの並列処理メカニズムは以下の通りです:
L1レベルの複数テーブル並列処理:最大recover_table_concurrency個のテーブルが同時にテナント間でのテーブルインポートタスクを実行できます。
L2レベルのテーブル内パーティション並列処理:単一テーブルのすべてのパーティションが並列して復旧されます。
L3レベルの単一パーティション内部並列処理:システムは各パーティションを最大recover_table_dop個の復旧サブタスクに分割し、各サブタスクは独立したテーブル単位の復旧スレッドによって実行され、パーティション内部の並列復旧を実現します。
これらのL1/L2/L3レベルの並列タスクはすべて、テーブル単位の復旧スレッドプールからスレッドリソースを申請する必要があり、テーブル単位の復旧スレッドプールのスレッド数は構成パラメータddl_thread_scoreによって制御されます。
補助テナントからターゲットテナントへのデータの並列インポートは、ターゲットテナントのリソースを消費するため、業務リクエストへの影響を避けるために、ターゲットテナントにリソース分離を設定することを推奨します。バックグラウンドタスクのリソース分離の設定方法については、バックグラウンドタスクのリソース分離設定例を参照してください。