OceanBaseデータベースはV4.1.0バージョンからアダプティブマージをサポートしています。アダプティブマージを有効にすると、システムはユーザーのクエリや書き込みなどの情報をリアルタイムで収集・統計し、それらの情報に基づいてクエリの遅延が発生する可能性のあるシナリオを特定し、マージタスクを適応的にスケジュールすることで、ユーザーに気付かれることなく関連するシナリオで発生する可能性のあるクエリの遅延問題を解決します。アダプティブマージが有効な期間中、システムはパーティション単位で統計情報の収集およびマージタスクのスケジューリングを行います。
アダプティブマージ機能を使用することで、以下の問題を解決できます:
一部のBuffer表問題の発生を回避します。
データロードシナリオでのクエリパフォーマンスを最適化します。
一部のクエリ遅延シナリオを特定し、回避します。
トリガールール
パーティションのLeaderが一定の条件を満たすと、システムはそのパーティションおよびFollowerレプリカに対して自動的にアダプティブマージをスケジュールします。アダプティブマージのトリガールールは以下の通りです:
システムは一定期間のパーティションの統計情報を分析し、そのパーティションのクエリおよびダンプの回数、および増分データにおける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テーブル現象を解決します。