本記事では、リソース分離に関する概念、リソース分離の方式、および適用シナリオについて説明します。
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を指定されたリソースグループにバインドして実行することで実現されます。一般的な適用シナリオとして、業務に複数のアカウントが存在し、あるアカウントの注文を処理する際にトランザクションを開始して、そのアカウントに関連する一連のSQLを実行する場合が挙げられます(通常はWHERE句でアカウントの値を指定します)。アカウント内にはデータ量の多い大口アカウントとデータ量の少ない小口アカウントが存在する可能性があります。大口アカウントがCPUリソースを使い果たしてしまい、小口アカウントの注文が処理できなくなるのを防ぐために、異なる注文を処理するSQLを異なるリソースグループにバインドすることができます。バインド後、異なる注文のSQLはそれぞれ異なるリソースグループのリソースを使用します。
関数レベルのリソース分離
Functionレベルのリソース分離は、バックグラウンドタスクとリソースグループのマッピング関係を指定することで、各タスクが使用するリソースを分離します。Functionレベルのリソース分離は、バックグラウンドタスクのCPUおよびIOPSの使用を制御するために使用されます。
現在、DAGスレッドに対応する以下の種類のバックグラウンドタスクのリソース使用量を制御できます。
- COMPACTION_HIGH:Mini MergeおよびDDL KV Mergeタスク
- HA_HIGH:レプリケーション、Rebuild、復元などの高優先順位・高信頼性タスク
- COMPACTION_MID:マイナーコンパクションタスク
- HA_MID:中優先度・高信頼性タスク。例:移行タスク
- COMPACTION_LOW:メジャーコンパクション
- 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バージョン以降でサポートされています)