本記事では、リソース分離に関連する概念、リソース分離方式およびその適用シナリオについて主に説明します。
cgroup(Control Groups)は、Linuxカーネルが提供するメカニズムであり、特定の動作に基づいて、一連のシステムタスクとそのサブタスクをリソースで区別された異なるグループに統合(または分離)することができます。これにより、システムリソース管理に統一的なフレームワークを提供します。
OceanBaseデータベースの現在のバージョンでは、テナントワーカースレッドとほとんどのバックグラウンドスレッドはテナントごとに区別されており、ネットワークスレッドは共有スレッドです。管理者はcgroupディレクトリを設定した後、DBMS_RESOURCE_MANAGERシステムパッケージを使用して、テナントのCPU使用率とIOPSの占有を制御できます。
DBMS_RESOURCE_MANAGERシステムパッケージ
OceanBaseデータベースでは、PLのDBMS_RESOURCE_MANAGERシステムパッケージを使用して、データベース内のリソースの割り当てを管理し、リソースの分離を実現します。DBMS_RESOURCE_MANAGERシステムパッケージは主に以下の要素のメンテナンスに使用されます:
リソースグループ:リソース要件に基づいてまとめられたセッションの集合です。システムはセッション単位ではなく、リソースグループ単位でリソースを割り当てます。
リソース管理計画:リソース管理計画内容を含むコンテナで、リソースグループにリソースをどのように割り当てるかを指定します。特定のリソース管理計画をアクティブ化することで、リソースの割り当てを制御できます。1つのリソース管理計画には複数のリソース管理計画内容が対応付けられますが、同一のリソース管理計画内容を2つ以上含めることはできません。
リソース管理計画内容:リソースグループとリソース管理計画を関連付けるために使用され、リソースグループにリソースをどのように割り当てるかを指定します。
DBMS_RESOURCE_MANAGERシステムパッケージの詳細については、DBMS_RESOURCE_MANAGERシステムパッケージ(Oracleモード) およびDBMS_RESOURCE_MANAGERシステムパッケージ(MySQLモード)を参照してください。
リソース分離方式
DBMS_RESOURCE_MANAGERシステムパッケージを使用してテナント内のリソース分離を設定する場合、リソース分離の適用粒度によって、以下のタイプに分類されます:
ユーザーレベルのリソース分離
ユーザーレベルのリソース分離とは、ユーザーとリソースグループのマッピング関係を指定することで、そのユーザーが実行するすべてのSQLが使用するリソースが対応するグループに割り当てられたリソースであることを実現します。
SQLレベルのリソース分離
SQLレベルのリソース分離は、ユーザーレベルよりもさらに細かい粒度での分離方式です。これは、特定の条件を満たすSQLを指定されたリソースグループ上で実行するようにバインドすることで実現されます。一般的な適用シナリオとしては、業務において複数のアカウントが存在し、あるアカウントの1つの注文を処理する際には、トランザクションを開始してそのアカウントに関連する一連のSQLを実行します(通常はWHERE条件でアカウントの値を指定します)。アカウントには大規模なアカウント(データ量が多い)と小規模なアカウント(データ量が少ない)が存在する可能性があります。大規模なアカウントがCPUリソースをすべて使用してしまうと、小規模なアカウントの注文が処理できなくなるため、異なる注文を処理するSQLを異なるリソースグループにバインドすることで、それぞれの注文に対応するSQLが異なるリソースグループのリソースを使用するようにします。
関数レベルのリソース分離
関数レベルのリソース分離とは、バックグラウンドタスクとリソースグループのマッピング関係を指定することで、各タスクが使用するリソースを分離します。関数レベルのリソース分離は、バックグラウンドタスクのCPU使用率とIOPS使用率を制御するために使用されます。
現在、DAGスレッドに対応する以下のバックグラウンドタスクの使用リソースを制御できます:
- COMPACTION_HIGH:Mini MergeとDDL KV Mergeタスク
- HA_HIGH:レプリケーション、Rebuild、復元などの高優先順位かつ高信頼性のタスク
- COMPACTION_MID:Minor Mergeタスク
- HA_MID:中優先順位かつ高信頼性のタスク、例えば移行タスクなど
- COMPACTION_LOW:Major Mergeタスク
- HA_LOW:バックアップおよびバックアップクリーンアップなどの低優先順位かつ高信頼性のタスク
- DDL:一意インデックス検証、カラム削除時のデータ補完など、その他のタスク
- DDL_HIGH:DDL MemTableのダンプタスク
- CLOG_LOW:物理スタンバイリポジトリとCDC読み取りタスク
- CLOG_MID:フォロワーのレプリカから共有ストレージへの読み込み、ログアーカイブからのローカルディスク読み込みなど、その他のタスク
- CLOG_HIGH:clogのローカルディスクへの書き込み、clogファイルの共有ストレージへのアップロード、フォロワーのレプリカからローカルディスクへの読み込みなど、その他のタスク
- OPT_STATS:統計情報収集タスク
- GC_MACRO_BLOCK:マクロブロックの回収および再利用タスク
- SQL_AUDIT:SQL監査ログのディスク書き込み
- IMPORT:インポートタスク
- MVIEW:マテリアライズドビューのバックグラウンドタスク(V4.3.5バージョンでは、V4.3.5 BP2バージョン以降からサポートされています)
- REPLAY_HIGH:ログリプレイ(V4.3.5バージョンでは、V4.3.5 BP2バージョン以降からサポートされています)