ビジネスで高同時実行性のオンラインランザクション処理 (OLTP) と複雑なオンライン分析処理 (OLAP) の両方が必要な場合は、RDS for MySQL インスタンスに DuckDB ベースの分析用読み取り専用インスタンスを追加できます。この設定により、データベースプロキシを介して HTAP ベースのクエリルーティングを実装できます。OLAP クエリは DuckDB ベースの分析用読み取り専用インスタンスにルーティングされ、OLTP クエリはプライマリ RDS インスタンスまたは通常の読み取り専用インスタンスにルーティングされます。このアーキテクチャにより、エンタープライズユーザーは HTAP クエリを効率的に処理できます。
概要
RDS for MySQL の HTAP ベースのクエリルーティングソリューションは、さまざまなストレージエンジンの明確な利点を活用します。データベースプロキシは、SQL クエリの推定実行コストに基づいて、リクエストを最適なインスタンスタイプに自動的に転送し、ワークロードの分離とパフォーマンスの最適化を実現します。
行指向インスタンス: プライマリ RDS for MySQL インスタンスと通常の読み取り専用インスタンスは InnoDB エンジンを使用しており、高同時実行性の OLTP 読み取りおよび書き込みリクエストの処理に最適です。
列ストアインスタンス: DuckDB ベースの分析用読み取り専用インスタンスは DuckDB エンジンを使用しており、複雑な OLAP 分析クエリ用に設計されています。
2 つのルーティングメソッドがサポートされています。
HTAP ベースの自動クエリルーティング: SQL 実行コストの推定に基づいて、OLAP および OLTP クエリを列ストアインスタンスまたは行指向インスタンスに自動的にルーティングします。
ヒントワードを使用した手動ルーティング: 自動ルーティングが期待どおりに機能しない場合、または MySQL バージョンがコスト推定をサポートしていない場合は、ヒントワードを使用して SQL クエリを手動でルーティングできます。
使用上の注意
HTAP ベースの自動クエリルーティングを使用する前に、次のことを確認してください。
お使いの RDS インスタンスは、マイナーエンジンバージョンが 20250731 以降の MySQL 8.0 を実行しており、DuckDB ベースの分析用読み取り専用インスタンスが作成されていること。
データベースプロキシ機能が有効になっており、プロキシバージョンが 2.25.8 以降であること。
インスタンスのマイナーエンジンバージョンまたはデータベースプロキシバージョンが要件を満たしていない場合は、マイナーエンジンバージョンを更新するか、データベースプロキシバージョンをアップグレードしてください。
注意事項
プライマリインスタンスで HTAP ベースの自動クエリルーティングを有効にする場合、インスタンスのプロキシエンドポイントの[読み書き分離属性] を [読み書き] に設定する必要があります。
DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みは、これらのインスタンス間の負荷分散にのみ影響し、行指向インスタンスと列ストアインスタンス間のルーティングロジックには影響しません。
すべての DuckDB ベースの分析用読み取り専用インスタンスが最大容量に達した場合、後続の分析リクエストは処理のためにキューに入れられます。
[読み取り重み割り当て] で [カスタム]を選択した場合、新しい DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みはデフォルトで 0 に設定され、手動で設定する必要があります。
要件に基づいて、データベースプロキシの遅延のしきい値、整合性レベル、読み書き属性、および読み取り重みを設定できます。詳細については、「データベースプロキシの設定」をご参照ください。
HTAP ベースの自動クエリルーティングを有効にする
RDS コンソールにログインします。左側のナビゲーションウィンドウで、[インスタンス] をクリックします。上部のナビゲーションバーで、プライマリ RDS インスタンスが存在するリージョンを選択します。
[インスタンス] ページで、プライマリ RDS インスタンス (
アイコン付き) の ID をクリックします。左側のナビゲーションウィンドウで、[データベースプロキシ] をクリックします。
[接続情報] セクションで、プロキシエンドポイントを見つけ、[アクション] 列の [設定の変更] をクリックします。
表示されるパネルで、[HTAP ベースの自動ルーティング] を有効にし、[OK] をクリックします。
DuckDB ベースの分析用読み取り専用インスタンスに読み取り重みを割り当てる
RDS for MySQL インスタンスに複数の DuckDB ベースの分析用読み取り専用インスタンスが設定されている場合、必要に応じてこれらの各インスタンスに読み取り重みを設定できます。デフォルトでは、プロキシエンドポイントの読み取り重みは [システム割り当て]に設定されています。読み取り重みが大きいほど、インスタンスが処理する読み取りリクエストが多くなります。
RDS コンソールにログインします。左側のナビゲーションウィンドウで、[インスタンス] をクリックします。上部のナビゲーションバーで、プライマリ RDS インスタンスが存在するリージョンを選択します。
[インスタンス] ページで、プライマリ RDS インスタンス (
アイコン付き) の ID をクリックします。左側のナビゲーションウィンドウで、[データベースプロキシ] をクリックします。
[接続情報] セクションで、プロキシエンドポイントを見つけ、[アクション] 列の [設定の変更] をクリックします。
表示されるダイアログボックスで、[読み取り重み割り当て] に [自動配布] を選択します。
[カスタム] を選択した場合、新しい DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みはデフォルトで 0 に設定され、手動で設定する必要があります。
[DuckDB ベースの読み取り専用インスタンスの読み取り重み] セクションで、各 DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みを設定します。
たとえば、プライマリ RDS インスタンスに 3 つの DuckDB ベースの分析用読み取り専用インスタンスがあり、それぞれの読み取り重みが 0、100、200 の場合、書き込みリクエストのみがプライマリ RDS インスタンスにルーティングされます。3 つの読み取り専用インスタンスは、1:2 の比率に基づいて読み取りリクエストを処理します。
説明読み取り重みは 0 から 10,000 までの整数にすることができます。
DuckDB ベースの分析用読み取り専用インスタンスが削除されると、その重みは自動的に削除され、他のインスタンスの重みは変更されません。
このパラメーターへの変更は、サービスを中断することなくすぐに有効になります。新規および既存の接続は、両方とも新しい重みに基づいてルーティングされます。
ヒントワードを使用したクエリの手動ルーティング
自動ルーティングが効果的でない場合、または MySQL バージョンがコスト推定をサポートしていない場合は、SQL 文にヒントワードを追加して、クエリに特定のクエリルートを強制することができます。
クエリを DuckDB ベースの分析用読み取り専用ノードにルーティングします。
/*force_ap_nodes*/ SELECT COUNT(*) FROM <Table_name>;クエリをプライマリ RDS インスタンスまたは通常の読み取り専用インスタンスにルーティングします。
SELECT /*+set_var(rds_cost_threshold_for_duckdb = 0)*/ COUNT(*) FROM <Table_name>;
リファレンス
関連 API:
DescribeDBProxy: データベースプロキシの詳細をクエリします。
DescribeDBProxyEndpoint: プロキシエンドポイントの情報をクエリします。
ModifyDBProxyEndpoint: プロキシエンドポイントのアクセスポリシーを設定します。
付録: HTAP ベースの自動クエリルーティングの仕組み
データベースプロキシはクエリを受信し、プライマリ RDS インスタンスや読み取り専用インスタンスなどの行指向インスタンスに転送します。
行指向インスタンスのオプティマイザーはクエリを分析し、その実行コストが事前定義されたしきい値を超えるかどうかを推定します。
推定コストがしきい値を下回る場合、クエリは行指向インスタンスで実行されるか、負荷分散に基づいて複数の通常の読み取り専用インスタンス間で実行されます。
推定コストがしきい値を超える場合、クエリは DuckDB ベースの分析用読み取り専用インスタンスにルーティングされるか、負荷分散に基づいて複数の DuckDB ベースの分析用読み取り専用インスタンス間でルーティングされます。