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