より優れた分離効果を実現するため、OceanBaseデータベースはグローバルCPUリソースに基づくフォアグラウンドとバックグラウンドの分離機能をサポートしています。この機能により、グローバルレベルで全テナントのフォアグラウンドおよびバックグラウンドタスクに対してCPUリソースを分離できます。
CPU分離の概要
高性能計算環境において、リソースの適切な割り当てと分離は、システムの安定性を確保し、効率を向上させる上で決定的な役割を果たします。効果的なリソース分離戦略は、タスク間のリソース争奪や相互干渉を防ぎ、リソース利用率と全体的なサービス品質を向上させることができます。現在、OceanBaseデータベースでは、テナントのUnit仕様を通じてテナント間のリソース分離を設定するとともに、DBMS_RESOURCE_MANAGERシステムパッケージを用いてテナント内のリソース分離を設定できます。
グローバルCPUリソースのフロントエンドとバックエンドの分離機能が有効になっていない場合、OBServerノードのCPU分離にはテナント間のCPU分離とテナント内のCPU分離が含まれ、その分離効果は以下の図に示されています。

分離の階層はツリー構造であり、テナント間の分離ポリシーはテナントのUnit仕様によって決定されます。また、各テナント内部では、DBMS_RESOURCE_MANAGERシステムパッケージによって制御される、各テナント内タスクのリソース分離が行われます。
グローバルCPUリソースのフロントエンドとバックエンドの分離機能を有効にすると、システムはテナントレベルでバックグラウンドタスクに基づくサブcgroupを作成します。このバックグラウンドサブcgroupは、「仮想テナント」として理解できます。つまり、MAX_CPUが構成パラメータglobal_background_cpu_quotaの値であり、MIN_CPUが1の仮想テナントと同じです。グローバルCPUリソースのフロントエンドとバックエンドの分離機能を有効にした場合の分離効果は、以下の表に示されています。

グローバルCPUリソースのフロントエンドとバックエンドの分離機能を有効にすると、テナント内の分離ポリシーを設定しなくても、全体的なレベルですべてのバックグラウンドタスクが使用できるCPUリソースの上限(global_background_cpu_quota)が制限されるため、バックグラウンドタスクがフロントエンド業務に影響を与えることを効果的に回避できます。
適用シナリオ
グローバルCPUリソースのフロントエンドとバックエンドの分離機能の推奨シナリオ:
フロントエンド業務への影響を避けるため、全体的なレベルでバックグラウンドタスクを分離したい場合。
特にテナント数が多い場合、計算や設定が複雑なテナント間またはテナント内のリソース分離ポリシーを設定したくない場合。
前提条件
グローバルCPUリソースのフロントエンドとバックエンドの分離機能を使用するには、OBServerノードにcgroupディレクトリが設定されていること、およびcgroup機能が有効であることが必要です。cgroupの詳細な設定と有効化の手順については、cgroupの設定を参照してください。
注意事項
テナント間のCPU分離について、グローバルCPUリソースのフロントエンドとバックエンドの分離機能を有効にした後、各テナントのバックグラウンドタスクが使用できるCPUの上限は、構成パラメータ
global_background_cpu_quotaの値によって制限されます。つまり、各テナントのバックグラウンドタスクが使用できるCPUの上限は実際には次のとおりです:min(テナントのMAX_CPU, global_background_cpu_quota)。注意
V4.2.1以降のバージョンでは、sysテナントの処理リクエストへの干渉を避けるため、sysテナントのCPU使用量に制限はありません。
テナント内のCPU分離について、グローバルCPUリソースのフロントエンドとバックエンドの分離機能を有効にした後、
DBMS_RESOURCE_MANAGERシステムパッケージを使用してテナント内のリソース分離を設定する際、テナント内の各バックグラウンドタスクのCPU使用上限は、テナント内のすべてのバックグラウンドタスクが使用できる総CPU上限に基づいて計算できます。つまり、テナント内の各バックグラウンドタスクのCPU使用上限は実際には次のとおりです:min(global_background_cpu_quota, テナントのMAX_CPU) * リソースグループ内のUTILIZATION_LIMIT。
グローバルCPUリソースのフォアグラウンド分離の有効化
OceanBaseデータベースは、以下の2つの構成パラメータを使用して、グローバルCPUリソースのフォアグラウンド分離を実現します:
enable_global_background_resource_isolationクラスタレベルの構成パラメータ
enable_global_background_resource_isolationは、フォアグラウンドタスクのCPUリソース分離を有効にするかどうかを制御します。デフォルト値はFalseであり、フォアグラウンドタスクのCPUリソース分離が無効であることを意味します。つまり、バックグラウンドタスクとフォアグラウンドタスクはテナント内で分離されます。この変更を有効にするには、OBServerノードの再起動が必要です。値が
Trueの場合、フォアグラウンドタスクのCPU分離が有効になり、バックグラウンドタスクはテナントの上位レベルで個別に分離されます。パラメータ
enable_global_background_resource_isolationの詳細については、enable_global_background_resource_isolationを参照してください。global_background_cpu_quotaクラスタレベルの構成パラメータ
global_background_cpu_quotaは、バックグラウンドタスクで使用可能なCPUクォータを制御します。デフォルト値は-1であり、バックグラウンドタスクで使用可能なCPUリソースがcgroupによって制限されないことを意味します。パラメータ
global_background_cpu_quotaの詳細については、global_background_cpu_quotaを参照してください。
グローバルCPUリソースのフォアグラウンド分離を有効にする手順は以下のとおりです:
rootユーザーでクラスタのsysテナントにログインします。以下のコマンドを実行して、フォアグラウンドタスクのCPUリソースのグローバル分離を有効にします。
obclient> ALTER SYSTEM SET enable_global_background_resource_isolation = True;バックグラウンドタスクで使用可能な最大CPUクォータを設定します。
バックグラウンドタスクで使用可能なCPUクォータは、業務上の実際の状況に応じて設定する必要があります。設定時には、その値が現在のOBServerノードのCPUクォータより小さいことが求められます。
obclient> ALTER SYSTEM SET global_background_cpu_quota = 3;設定を有効にするために、OBServerノードを再起動します。
設定が有効になると、システムは元のcgroupディレクトリ構造内に、すべてのテナントと同じレベルの
backgroundディレクトリを作成し、これをバックグラウンドタスクのcgroupとします。また、backgroundディレクトリ内には、すべてのテナントに対応するcgroupディレクトリが新たに作成されます。
次のステップ
グローバルCPUリソースのフォアグラウンド分離機能を有効にすることで、グローバルレベルでバックグラウンドタスクを制限することができますが、さらにバックグラウンドタスクに対してより細かい分離制御を希望する場合は、DBMS_RESOURCE_MANAGER システムパッケージを使用してテナント内のリソース分離を設定する必要があります。DBMS_RESOURCE_MANAGER システムパッケージを使用したテナント内リソース分離の詳細な操作については、テナント内リソース分離の設定を参照してください。