ハイブリッドオプティマイザーの自動リクエスト分散メカニズムは、各クエリを分析します。ローストアノードと列ストアノードの両方で実行コストを評価し、最適な実行計画を選択します。このプロセスにより、クエリの実行コストが削減され、各クエリが最も適切な処理ノードに割り当てられます。
問題の説明
デフォルトの自動リクエスト分散メカニズムは、推定実行コストに基づくポリシーを使用します。SQL 文の推定コストが事前に設定されたしきい値を超えると、データベースプロキシ (PolarProxy) はリクエストを読み取り専用の列ストアノードに自動的に転送します。それ以外の場合、リクエストは読み取り専用のローストアノードまたはプライマリノードによって処理されます。このアプローチの主な欠点は、ローストア環境と列ストア環境での実際の実行コストを比較しないことです。代わりに、固定のしきい値に依存するため、リクエストの分散が不正確になることがよくあります。
バージョン要件
お使いの PolarDB クラスターは、次のいずれかのカーネルバージョンを使用する必要があります:
PolarDB for MySQL 8.0.1、リビジョン 8.0.1.1.43 以降。
PolarDB for MySQL 8.0.2、リビジョン 8.0.2.2.26 以降。
詳細については、「クラスターのカーネルバージョンを表示する」をご参照ください。
注意
行/列ストアの自動リクエスト分散がクラスターエンドポイントで有効になっていることを確認してください。
仕組み
PolarDB for MySQL には、3 種類のノードがあります:
ローストアノード: InnoDB エンジンを使用してローストアクエリを実行します。
列ストアノード: IMCI エンジンを使用して列ストアクエリを処理します。
PolarProxy ノード: クライアントリクエストをローストアノードまたは列ストアノードに転送します。
クライアントからクラスターにクエリリクエストが送信されると、次のように処理されます:
PolarProxy ノードはクエリリクエストを受信し、まず処理のためにローストアノードに転送します。
ローストアノード内のハイブリッドオプティマイザーがクエリを分析します。ローストア環境と列ストア環境の両方で実行コストを評価し、最適な実行パスを決定します。
クエリがローストアノードでの処理に適している場合は、ローカルのローストアノードで処理されます。
列ストアノードの方が優れていると判断された場合、ローストアノードはクエリリクエストを処理のために列ストアノードに転送します。
このプロセスの鍵は、ハイブリッドオプティマイザーによって行われるルーティング決定です。この決定を正確に行うために、オプティマイザーは 2 つの異なるコストモデルを使用します:
ローストアコストモデルは、MySQL 実行計画に基づいて実行コストを推定します。
列ストアコストモデルは、IMCI 実行計画に基づいて実行コストを推定します。
両方のコストモデルは、推定実行時間を表す統一された物理的に意味のあるメジャーを使用します。ローストアと列ストアのコスト見積もりを比較することにより、ハイブリッドオプティマイザーは最適なクエリパフォーマンスのために最良の実行計画を選択します。
クォータリクエストプロセス
ハイブリッドオプティマイザー機能は段階的リリースです。この機能を有効にするには、Quota Center に移動し、クォータ ID
polardb_mysql_hybrid_optimizerを使用して「PolarDB MySQL Hybrid Optimizer Quota」という名前のクォータを見つけ、[アクション] 列の [リクエスト] をクリックします。この機能を無効にするプロセスも同様です。ハイブリッドオプティマイザーを無効にするには、クォータリクエストで [無効化] を選択し、リクエストが承認されるのを待ちます。
Quota Center に移動します。クォータ ID を入力してクォータを検索し、[適用] をクリックします。

クォータリクエストのダイアログボックスで、[有効] を選択します。次に、有効期間、理由を指定し、通知結果を設定します。

[OK] をクリックします。リクエストが承認されると、ハイブリッドオプティマイザー機能が有効になります。