OceanBaseデータベースには多数のリライトルールと複雑なプラン生成アルゴリズムが存在し、これらがOceanBaseデータベースの強力な最適化機能を実現しています。しかし、どんなことにも二面性があります。より多くのリライト試行やより複雑なプラン生成アルゴリズムは、必然的にプランの生成時間を長くします。極端なTPシナリオでは、主キーの単一ポイントクエリのSQLがプラン生成に1msかかるかもしれませんが、プランの実行自体は0.5msしかかからない場合があります。このようなシナリオで、各SQLの実行ごとにプランを再生成すると、SQLの主な時間消費はプラン生成に費やされてしまいます。そのため、OceanBaseデータベースは同一のSQLが実行計画を共有できるように、プランキャッシュ(Plan Cache)メカニズムを導入しています。
プランキャッシュ
OceanBaseデータベースがSQLリクエストを受信すると、まずfast parserモジュールを用いてSQLテキストに対する高速パラメータ化を行います。高速パラメータ化の役割は、SQLテキスト内の定数パラメータをワイルドカード?に置き換えることです。例えば、SELECT * FROM t1 WHERE c1 = 1はSELECT * FROM t1 WHERE c1 = ?に置き換えられます。次に、データベースはプランキャッシュ内に、このパラメータ化されたSQL用に既に生成されているプランがないか確認します。利用可能なプランが見つかれば、データベースはそのプランを直接実行します。利用可能なプランが見つからない場合、データベースはこのSQLのために新たに実行計画を生成し、生成されたプランをプランキャッシュに保存して、後続のSQLで使用できるようにします。通常、プランキャッシュから直接実行計画を取得する方が、実行計画を再生成するよりも少なくとも1桁早く終わります。したがって、プランキャッシュを使用することで、実行計画の取得時間を大幅に短縮し、結果としてSQLの応答時間を短縮できます。
アダプティブプランキャッシュ
OceanBaseデータベースのPlan Cache機能はデフォルトで有効になっていますが、APシナリオではPlan Cacheを無効にすることで、しばしばより良いパフォーマンスが得られます。しかし、HTAP混合負荷のビジネスシナリオでは、Plan Cacheを無効にすると、AP寄りのSQLはパフォーマンスが向上しますが、TP寄りのSQLには大きな影響を与えます。そのため、OceanBaseデータベースはV4.3.5 BP2バージョンで、Plan Cacheの自動有効化機能をサポートしました。TPのSQLにはPlan Cacheを有効にし、APのSQLには無効にすることで、全体としてより優れたパフォーマンスを実現します。
アダプティブプランキャッシュの制御
OceanBaseデータベースはV4.3.5 BP2バージョンで、アダプティブプランキャッシュに関連する構成パラメータを新規追加しました:
enable_adaptive_plan_cache:テナントレベルの構成パラメータで、テナントのプランキャッシュ自動有効化機能を有効にするかどうかを制御します。詳細については、enable_adaptive_plan_cacheを参照してください。_pc_adaptive_min_exec_time_threshold:テナントレベルの隠れた構成パラメータで、アダプティブプランキャッシュを有効にする最小実行時間のしきい値を設定します。アダプティブプランキャッシュ機能が有効な場合、実行時間がこのしきい値を超えるSQLに対してのみ、アダプティブプランキャッシュが有効になります。プロパティの説明は以下のとおりです:プロパティ説明パラメータタイプ TIME デフォルト値 1s 値の範囲 [0, +∞] 変更は可能か はい。 ALTER SYSTEM SETステートメントを使用してこの構成パラメータの値を変更できます。例:ALTER SYSTEM SET _pc_adaptive_min_exec_time_threshold = '2s';。説明
Oracleモードでは、構文上隠れた構成パラメータには二重引用符を付ける必要があります。
OBServerノードの再起動が必要か 不要です。設定は即時に反映されます。 _pc_adaptive_effectiveness_ratio_threshold:テナントレベルの隠れた構成パラメータで、アダプティブプランキャッシュを有効にする最小比率のしきい値を設定します。アダプティブプランキャッシュ機能が有効な場合、プランの実行時間/プランの生成時間がこのしきい値以上の場合にのみ、アダプティブプランキャッシュが有効になります。プロパティの説明は以下のとおりです:プロパティ説明パラメータタイプ INT デフォルト値 5 値の範囲 [0, +∞] 変更は可能か はい。 ALTER SYSTEM SETステートメントを使用してこの構成パラメータの値を変更できます。例:ALTER SYSTEM SET _pc_adaptive_effectiveness_ratio_threshold = 6;。説明
Oracleモードでは、構文上隠れた構成パラメータには二重引用符を付ける必要があります。
OBServerノードの再起動が必要か 不要です。設定は即時に反映されます。 _force_enable_plan_tracing:テナントレベルの隠れた構成パラメータで、プランキャッシュが無効な場合にプラントレースを有効にするかどうかを制御します。プロパティの説明は以下のとおりです:プロパティ説明パラメータタイプ BOOL デフォルト値 TRUE、計画キャッシュを無効にした場合でも計画追跡を有効にすることを示します。 値の範囲 - TRUE
- FALSE
変更は可能か はい。 ALTER SYSTEM SETステートメントを使用してこのパラメータの値を変更できます。例:ALTER SYSTEM SET _force_enable_plan_tracing = FALSE;。説明
Oracleモードでは、構文上、隠れたパラメータに二重引用符を付ける必要があります。
OBServerノードの再起動が必要か 不要です。設定は即時に反映されます。
適応型Plan Cacheが有効な場合、SQLの実行が終了した後、実行フィードバックに基づき、以下の3つの条件を同時に満たす場合、そのSQLに対してPlan Cacheを無効にする必要があると判断されます。
- SQLの実行時間が、隠れたパラメータ
_pc_adaptive_min_exec_time_thresholdで設定されたしきい値を超える場合。 - SQLの実行時間/計画生成時間が、隠れたパラメータ
_pc_adaptive_effectiveness_ratio_thresholdで設定されたしきい値を超える場合。 - 複数回の実行で、連続5回すべて上記の2つの条件を満たす場合。