現在のOceanBaseデータベースのカーネルには、フロントエンドタスクおよびバックグラウンドタスクを含む10数種類のリソース要求タイプがあります。そのほとんどのバックグラウンドタスクの優先度は特に高くないため、これらのバックグラウンドタスクのリソースに対してリソース分離を行い、デフォルトでリソース分離を有効にする必要があります。
テナント内のリソース分離の設定では、バックグラウンドタスクのリソース分離を自由に設定する方法が複雑であるため、このセクションではリソース要求タイプをグループ化することで、バックグラウンドタスクのリソース分離に対する推奨設定方法を提供します。
リソースリクエストタイプのグループ化
現在のリソース分離の設定方法は複雑であるため、設定を簡素化するためにこれらのリソースリクエストタイプをグループ化できます。全体として、以下のリソースグループに分類できます:
- Cログ送信リソースグループ:CLOG_HIGH_GROUP
- ダンプリソースグループ:COMPACTION_HIGH_GROUP
- バックグラウンドタスクリソースグループ:BACKGROUND_GROUP
上記の各リソースグループに含まれるリソースリクエストタイプは、次の表のとおりです。各リソースリクエストタイプ(バックグラウンドタスク)の詳細な説明については、リソース分離の概要を参照してください。
リソースグループ |
含まれるリソース要求タイプ |
|---|---|
| CLOG_HIGH_GROUP | CLOG_HIGH |
| COMPACTION_HIGH_GROUP | COMPACTION_HIGH |
| BACKGROUND_GROUP |
|
リソース分離ポリシー
グループ分けに基づき、これらのリソースグループに対してリソース分離ポリシーを計画できます。推奨されるリソース分離ポリシーは以下のとおりです。
リソースグループ |
MIN_IOPS |
MAX_IOPS |
IOPS_WEIGHT |
MAX_CPU |
CPU_WEIGHT |
|---|---|---|---|---|---|
| CLOG_HIGH_GROUP | 40 | 100 | 100 | 100 | 30 |
| COMPACTION_HIGH_GROUP | 30 | 100 | 50 | 100 | 70 |
| BACKGROUND_GROUP | 10 | 100 | 30 | 100 | 70 |
説明
バックグラウンドタスク CLOG_HIGH は業務リクエストの遅延に直接影響するため、I/Oリクエストの要件は可能な限り満たす必要があります。そのため、リソースグループ CLOG_HIGH_GROUP の MIN_IOPS を40に設定します。同時に、このタスクのCPU要求は高くないため、CPU_WEIGHT を30に設定します。
バックグラウンドタスクのリソース分離の設定
前提条件
CPUのリソース分離はcgroupに依存しているため、CPUのリソース分離を制御する必要がある場合は、バックグラウンドタスクのリソース分離を設定する前に、cgroupディレクトリを設定し、cgroup機能を有効にする必要があります。
cgroupディレクトリの設定とcgroup機能の有効化に関する操作については、cgroupの設定を参照してください。
(オプション)バックグラウンドタスクのリソース分離を設定する前に、ディスク性能のキャリブレーションを行い、テナントUnitのIOPSを設定できます。
説明
現在のバージョンでは、CPUおよびIOPSのリソース分離は、ディスク性能のキャリブレーション操作に強く依存しなくなりました。
rootユーザーでクラスタのsysテナントにログインします。ディスク性能のキャリブレーションを実行します。
以下のコマンドを実行して、ディスクキャリブレーションタスクをトリガーします。
obclient> ALTER SYSTEM RUN JOB "io_calibration";ステートメントの実行が成功した後、以下のコマンドを実行して、キャリブレーションの進捗状況を確認します。
obclient> SELECT * FROM oceanbase.GV$OB_IO_CALIBRATION_STATUS;キャリブレーションが完了して有効になるまでに1〜2分かかる場合があります。有効になったら、以下のコマンドを実行して、キャリブレーション値を確認します。
obclient> SELECT * FROM oceanbase.GV$OB_IO_BENCHMARK;
テナントUnitのIOPSを設定します。前の手順で取得したOBServerノード上のディスクキャリブレーション値に基づき、16KB読み取りのディスクキャリブレーション値をそのノードのIOPS設定の上限値として使用します。
テナントUnitのIOPSの詳細な設定と説明については、テナント内のリソース分離の設定のテナントのMAX_IOPSとMIN_IOPSを有効な値に設定するの内容を参照してください。
手順
ユーザーテナントのテナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
以下のSQLを実行して、バックグラウンドタスクのリソース分離を設定します。
/*プランの作成*/ CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN('GLOBAL_PLAN','plan for global'); /*リソースグループ COMPACTION_HIGH_GROUP の作成*/ CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'COMPACTION_HIGH_GROUP', COMMENT => 'COMPACTION_HIGH_GROUP'); CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'GLOBAL_PLAN', GROUP_OR_SUBPLAN => 'COMPACTION_HIGH_GROUP' , COMMENT => 'COMPACTION_HIGH_GROUP', MAX_IOPS => 100, MIN_IOPS => 30, WEIGHT_IOPS => 50,UTILIZATION_LIMIT => 100, MGMT_P1 => 70); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_HIGH', 'COMPACTION_HIGH_GROUP'); /*リソースグループ CLOG_HIGH_GROUP の作成*/ CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'CLOG_HIGH_GROUP', COMMENT => 'CLOG_HIGH_GROUP'); CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'GLOBAL_PLAN', GROUP_OR_SUBPLAN => 'CLOG_HIGH_GROUP' , COMMENT => 'CLOG_HIGH_GROUP', MAX_IOPS => 100, MIN_IOPS => 40, WEIGHT_IOPS => 100, UTILIZATION_LIMIT => 100, MGMT_P1 => 30); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'CLOG_HIGH', 'CLOG_HIGH_GROUP'); /*リソースグループ BACKGROUND_GROUP の作成*/ CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'BACKGROUND_GROUP', COMMENT => 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'GLOBAL_PLAN', GROUP_OR_SUBPLAN => 'BACKGROUND_GROUP' , COMMENT => 'BACKGROUND_GROUP', MAX_IOPS => 100, MIN_IOPS => 10, WEIGHT_IOPS => 30, UTILIZATION_LIMIT => 100, MGMT_P1 => 70); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_LOW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_MID', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_LOW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_MID', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_HIGH', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'DDL', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'DDL_HIGH', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'CLOG_LOW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'CLOG_MID', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'OPT_STATS', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'GC_MACRO_BLOCK', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'IMPORT', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'SQL_AUDIT', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'MVIEW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'REPLAY_HIGH', 'BACKGROUND_GROUP'); /*プランの有効化*/ SET GLOBAL resource_manager_plan = 'GLOBAL_PLAN';
関連ドキュメント
このセクションでは、バックグラウンドタスクのリソース分離に関する推奨設定方法のみを提供します。テナント内のその他のタイプの分離設定については、以下のドキュメントを参照して設定してください: