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ノードの再起動が必要か 不要です。設定は即時に反映されます。
アダプティブプランキャッシュが有効な場合、SQLの実行終了後、実行フィードバックに基づき、以下の3点を同時に満たす場合、そのSQLに対してプランキャッシュを無効にする必要があると判断されます。
- SQLの実行時間が非表示構成パラメータ
_pc_adaptive_min_exec_time_thresholdで設定されたしきい値を超える。 - SQLの実行時間 / プランの生成時間が非表示構成パラメータ
_pc_adaptive_effectiveness_ratio_thresholdで設定されたしきい値を超える。 - 複数回の実行で、連続5回とも上記の2つの条件を満たす。