現在のOceanBaseデータベースのカーネルには、フロントエンドタスクおよびバックグラウンドタスクを含む10数種類のリソース要求タイプがあります。そのほとんどのバックグラウンドタスクの優先順位は特に高くないため、これらのバックグラウンドタスクのリソースを分離し、デフォルトでリソース分離を有効にする必要があります。
テナント内のリソース分離の設定では、バックグラウンドタスクのリソース分離を自由に設定する方法が複雑であるため、このセクションではリソース要求タイプをグループ化することで、バックグラウンドタスクのリソース分離に対する推奨設定方法を提供します。
リソースリクエストタイプのグループ化
現在のリソース分離の設定方法は複雑であるため、設定を簡略化するためにこれらのリソースリクエストタイプをグループ化できます。全体として、以下のリソースグループに分類できます:
- clogログ送信リソースグループ: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を実行して、バックグラウンドタスクのリソース分離を設定します。
/*planを作成*/ 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';
関連ドキュメント
このセクションでは、バックグラウンドタスクのリソース分離に関する推奨設定方法のみを提供します。テナント内のその他のタイプの分離設定については、以下のドキュメントを参照して設定してください: