現在の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を設定する必要があります。
説明
V4.3.5バージョンでは、V4.3.5 BP2バージョン以降、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を実行して、バックグラウンドタスクのリソース分離を設定します。
V4.3.5/V4.3.5 BP1バージョンV4.3.5 BP2以降のバージョン/*作成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', 'GCMacro_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'); /*planを有効化*/ SET GLOBAL resource_manager_plan = 'GLOBAL_PLAN';/*作成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', 'GCMacro_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'); /*planを有効化*/ SET GLOBAL resource_manager_plan = 'GLOBAL_PLAN';
関連ドキュメント
この記事では、バックグラウンドタスクのリソース分離に関する推奨設定方法のみを提供しています。テナント内のその他のタイプの分離設定については、以下のドキュメントを参照してください: