より優れた分離効果を実現するため、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システムパッケージを使用してテナント内リソース分離を設定する詳細な操作手順については、テナント内リソース分離の設定を参照してください。