このセクションでは、テーブルレベルリストアの技術原理について説明します。
テーブルレベルリストアの全体プロセス
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によって制御されます。
補助テナントからターゲットテナントへのデータの並列インポートは、ターゲットテナントのリソースを消費するため、業務リクエストへの影響を避けるためには、ターゲットテナントにリソース分離を設定することを推奨します。バックグラウンドタスクのリソース分離の設定方法については、バックグラウンドタスクのリソース分離設定例を参照してください。