OceanBaseデータベースはV4.1.0バージョンからアダプティブマージをサポートしています。アダプティブマージを有効にすると、システムはユーザーのクエリや書き込みなどの情報をリアルタイムで収集・統計し、それらの情報に基づいてクエリの遅延が発生する可能性のあるシナリオを特定し、マージタスクを適応的にスケジュールすることで、ユーザーに気付かれることなく関連するシナリオで発生する可能性のあるクエリの遅延問題を解決します。アダプティブマージが有効な期間中、システムはパーティション単位で統計情報の収集およびマージタスクのスケジューリングを行います。
アダプティブマージ機能を使用することで、以下の問題を解決できます:
バッファテーブルの一部の問題を回避します。
データ導入時のクエリパフォーマンスを最適化します。
一部のクエリ遅延シナリオを特定し、回避します。
トリガールール
パーティションのリーダーが特定の条件を満たすと、システムはそのパーティションおよびフォロワーレプリカに対して自動的に適応型メジャーコンパクションをスケジュールします。適応型メジャーコンパクションのトリガールールは以下の通りです:
システムは一定期間のパーティション統計情報を分析し、そのパーティションのクエリおよびダンプ回数、および増分データにおけるInsert行数の割合を取得して、そのシナリオがデータ導入シナリオであるかどうかを確認します。データ導入シナリオである場合、そのパーティションに対して適応型メジャーコンパクションをトリガーします。
システムは一定期間のパーティション統計情報を分析し、そのパーティションのダンプ回数、および増分データにおける更新および削除行の割合を取得して、そのシナリオがデータ導入シナリオであるかどうかを確認します。データ導入シナリオである場合、そのパーティションに対して適応型メジャーコンパクションをトリガーします。
システムはパーティションの増分データの総行数を統計し、そのシナリオが継続的書き込みシナリオであるかどうかを確認します。継続的書き込みシナリオである場合、システムはそのパーティションに対して適応型メジャーコンパクションをトリガーします。
システムはクエリでスキャンされたデータ量と実際の有効データの比率を確認し、そのパーティションに対するクエリがスロークエリであるかどうかを判断します。スロークエリである場合、システムはそのパーティションに対して適応型メジャーコンパクションをトリガーします。
注意事項
適応型メジャーコンパクションは、一部のクエリの遅延問題を効果的に軽減できます。業務上、クエリ性能に対する要求が高く、かつ適応型メジャーコンパクションがサポートするシナリオが存在する場合は、適応型メジャーコンパクション機能を無効にしないことを推奨します。
OceanBaseデータベースでは、名前が「_」で始まる構成パラメータはすべて隠れた構成パラメータであり、開発者が障害診断や緊急運用時にのみ使用します。適応型メジャーコンパクション機能を無効にする必要がある場合は、技術サポートチームに連絡し、対応を依頼してください。
ステップ1:適応型メジャーコンパクションを有効にする
適応型メジャーコンパクション機能は、テナントレベルの隠れた構成パラメータ _enable_adaptive_compaction によって制御され、デフォルトでは有効になっています。
rootユーザーでクラスタのsysテナントにログインします。テナントレベルの隠れた構成パラメータ
_enable_adaptive_compactionの値を確認します。obclient [oceanbase]> SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME LIKE '_enable_adaptive_compaction';クエリ結果は次のとおりです:
+----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+ | SVR_IP | SVR_PORT | ZONE | SCOPE | TENANT_ID | NAME | DATA_TYPE | VALUE | INFO | SECTION | EDIT_LEVEL | DEFAULT_VALUE | ISDEFAULT | +----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+ | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1 | _enable_adaptive_compaction | BOOL | True | specifies whether allow adaptive compaction schedule and information collection | TENANT | DYNAMIC_EFFECTIVE | True | YES | | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1001 | _enable_adaptive_compaction | BOOL | True | specifies whether allow adaptive compaction schedule and information collection | TENANT | DYNAMIC_EFFECTIVE | True | YES | | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1002 | _enable_adaptive_compaction | BOOL | True | specifies whether allow adaptive compaction schedule and information collection | TENANT | DYNAMIC_EFFECTIVE | True | YES | | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1003 | _enable_adaptive_compaction | BOOL | True | specifies whether allow adaptive compaction schedule and information collection | TENANT | DYNAMIC_EFFECTIVE | True | YES | | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1004 | _enable_adaptive_compaction | BOOL | True | specifies whether allow adaptive compaction schedule and information collection | TENANT | DYNAMIC_EFFECTIVE | True | YES | +----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+ 5 rows in setクエリ結果で、
VALUE列の値がTrueであれば、適応型メジャーコンパクションは有効になっています。適応型メジャーコンパクションが無効な場合、以下のステートメントを実行して有効にできます。
obclient [oceanbase]> ALTER SYSTEM SET _enable_adaptive_compaction = True TENANT = tenant_name;注意
適応型メジャーコンパクションのスケジュールタスクの実行はシステムリソースの一部を占有するため、システムリソースの使用量を削減するには、テナントレベルの隠れた構成パラメータ
_enable_adaptive_compactionの値をFalseに変更することで、extremeモードのテーブルを除く他の適応型メジャーコンパクションのスケジューリングを無効にできます。
(オプション)ステップ2:テーブルオプション table_mode を使用して適応型メジャーコンパクション戦略を指定する
適応型メジャーコンパクションを有効にした後、Bufferテーブルによるパフォーマンス低下の問題をより柔軟に解決するため、OceanBaseデータベースはV4.2.3バージョンからテーブルオプション table_mode をサポートしています。ユーザーは各テーブルに異なる table_mode 値を設定することで、異なる高速フリーズおよび適応型メジャーコンパクション戦略を指定し、Bufferテーブルの問題に対処できます。
テーブル作成時またはテーブル変更時に、テーブルオプション table_mode を使用して、異なるモードの適応型メジャーコンパクション戦略を指定できます。テーブルオプション table_mode は、異なるメジャーコンパクション戦略に対応する以下の5つのモードを提供します。
モード |
ダンプ後のメジャーコンパクションのトリガー確率 |
|---|---|
| normal(デフォルト値) | ごく低い |
| queuing | 低 |
| moderate | 中 |
| super | 高 |
| extreme | 非常に高い |
業務に精通している場合は、テーブル作成時に業務状況に応じて適切なモードを設定できます。例えば、queuing モードのテーブルを作成する例を以下に示します。
obclient> CREATE TABLE tbl1 (c1 int, c2 double) table_mode = 'queuing';
上記のステートメントでは、table_mode 値を明示的に指定しない場合、システムはデフォルトで normal モードのテーブルを作成します。
テーブル作成後、特定のテーブルで読み込み増幅が深刻で、Bufferテーブル現象が発生した場合、業務ニーズに応じて、そのテーブルの table_mode を手動で変更し、システムがそのテーブルのメジャーコンパクションをより頻繁にトリガーしてクエリを高速化させることができます。メジャーコンパクションの頻度が高くなるほど、消費する計算リソースも多くなるため、メジャーコンパクションのトリガー頻度が低い順に table_mode 値を段階的に調整することを推奨します。例えば、まず normal から queuing に調整し、一定期間観察した後、queuing から moderate に調整します。調整の例を以下に示します。
obclient> ALTER TABLE tbl1 SET table_mode = 'moderate';
テーブル変更のステートメントが正常に実行されると、システムには一定の遅延(約2分)が発生します。変更が反映された後、システムは設定されたメジャーコンパクションモードで適応型メジャーコンパクションをスケジュールし、Bufferテーブル現象を解決します。