高同時実行のオンライントランザクション処理(OLTP)と複雑なオンライン分析処理(OLAP)の両方のワークロードを処理する必要がある場合は、RDS for MySQL インスタンスに DuckDB ベースの分析用読み取り専用インスタンスを追加できます。データベースプロキシを使用して、自動 HTAP クエリルーティングまたはヒントワードによる手動ルーティングを有効化できます。この機能により、OLAP クエリは DuckDB ベースの分析用読み取り専用インスタンスに、OLTP クエリはプライマリインスタンスまたは通常の読み取り専用インスタンスにルーティングされ、トランザクション処理とデータ分析を効率的に統合できます。
概要
RDS for MySQL の HTAP クエリルーティングソリューションは、異なるストレージエンジンの特長を活用します。データベースプロキシは、SQL クエリの推定実行コストに基づいて、リクエストを最も適したインスタンスタイプに自動的にルーティングします。これにより、ワークロードの分離とパフォーマンスの最適化が実現されます。
インスタンスタイプ
-
行指向インスタンス:RDS for MySQL のプライマリインスタンスおよび通常の読み取り専用インスタンス。これらのインスタンスは InnoDB ストレージエンジンを使用し、高同時実行の OLTP 読み取り・書き込みリクエストの処理に適しています。
-
カラムストアインスタンス:DuckDB ベースの分析用読み取り専用インスタンス。このインスタンスは DuckDB エンジンを使用し、複雑な OLAP 分析クエリに適しています。
ルーティング方法
RDS for MySQL は、次の 2 種類のクエリルーティング方法をサポートしています。
-
自動 HTAP クエリルーティング:SQL ステートメントの推定実行コストに基づき、OLAP クエリと OLTP クエリをカラムストアインスタンスまたは行指向インスタンスに自動的にルーティングします。
-
ヒントワードによる手動ルーティング:自動ルーティングが効果的でない場合や、ご利用の MySQL バージョンがコスト見積もりに対応していない場合は、
ヒントワードを使用してルーティング先を手動で指定できます。
SQL 実行コスト
自動ルーティングを使用する場合、SHOW STATUS LIKE 'Last_query_cost' コマンドを実行して、SQL ステートメントの推定実行コストを確認できます。これにより、ルーティング判断の根拠を理解できます。実行コストを確認する前に、EXPLAIN ステートメントを実行することを推奨します。
例
SELECT COUNT(*) FROM sbtest5.sbtest1 ステートメントの推定実行コストを表示します。
EXPLAIN SELECT COUNT(*) FROM sbtest5.sbtest1;
SHOW STATUS LIKE 'Last_query_cost';
-- Example result:
+-------------------+---------------+
| Variable_name | Value |
+-------------------+---------------+
| Last_query_cost | 84454.999000 |
+-------------------+---------------+
この結果から、SQL ステートメントの推定実行コストが 84454.999000 であることがわかります。システムはこのコスト値に基づき、クエリをカラムストアインスタンスにルーティングするかどうかを決定します。
前提条件
自動 HTAP クエリルーティングを使用するには、プライマリインスタンスが次の条件を満たしている必要があります。
-
インスタンスは MySQL 8.0(マイナーエンジンバージョン 20250731 以降)または MySQL 5.7(マイナーエンジンバージョン 20260228 以降)を実行していること。
-
DuckDB ベースの分析用読み取り専用インスタンスが追加済みであること。
-
データベースプロキシ機能が有効化されており、データベースプロキシのバージョンが 2.25.8 以降であること。
MySQL のマイナーエンジンバージョンおよびデータベースプロキシのバージョンをスペックアップする方法については、「マイナーエンジンバージョンのスペックアップ」および「データベースプロキシのマイナーエンジンバージョンのスペックアップ」をご参照ください。
注意事項
-
データベースプロキシのレイテンシーしきい値および整合性レベルは、DuckDB ベースの分析用読み取り専用インスタンスにも適用されます。
-
DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みは、これらのインスタンス間の負荷分散にのみ影響し、行指向インスタンスとカラムストアインスタンス間のルーティングロジックには影響しません。
-
すべての DuckDB ベースの分析用読み取り専用インスタンスがフルキャパシティの場合、後続の分析クエリはそれらのインスタンスで処理されるまでキューに格納されます。
-
プロキシエンドポイントの読み取り重みをカスタムに設定すると、プライマリインスタンスに新たに追加された DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みはデフォルトで 0 となり、手動での設定が必要になります。
データベースプロキシのレイテンシーしきい値、整合性レベル、読み取り/書き込み属性、および読み取り重みは柔軟に設定できます。詳細については、「データベースプロキシの設定」をご参照ください。
自動 HTAP クエリルーティング
自動クエリルーティングの有効化
-
RDS コンソールにログインします。左側のナビゲーションウィンドウで、インスタンスをクリックします。上部のナビゲーションバーで、ご利用のインスタンスのリージョンを選択します。
-
インスタンスページで、対象のプライマリインスタンスの ID をクリックします。プライマリインスタンスには
アイコンが付いています。 -
左側のナビゲーションウィンドウで、データベースプロキシをクリックします。
-
接続情報セクションで、対象のプロキシエンドポイントを見つけ、操作列の設定の変更をクリックします。
-
表示されるダイアログボックスで、HTAP ベースの自動クエリルーティングを有効化し、OKをクリックします。
DuckDB インスタンスへの読み取り重みの割り当て
RDS for MySQL インスタンスに複数の DuckDB ベースの分析用読み取り専用インスタンスがある場合は、ビジネス要件に応じて各インスタンスに読み取り重みを設定できます。デフォルトでは、プロキシエンドポイントの読み取り重みはシステム割り当てに設定されています。読み取り重みが高いほど、そのインスタンスがより多くの読み取りリクエストを処理します。
-
RDS コンソールにログインします。左側のナビゲーションウィンドウで、インスタンスをクリックします。上部のナビゲーションバーでリージョンを選択します。
-
インスタンスページで、
アイコンが付いた対象のプライマリインスタンスの ID をクリックします。 -
左側のナビゲーションウィンドウで、データベースプロキシをクリックします。
-
[接続情報]セクションで、対象のプロキシエンドポイントを見つけ、[設定の変更]を[操作]列でクリックします。
-
表示されるダイアログボックスで、読み取りの重み割り当てをカスタムに設定します。
カスタムに設定すると、このプライマリインスタンスに新たに追加された DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みはデフォルトで 0 となり、手動での設定が必要になります。
-
DuckDB分析読み取り専用インスタンスの読み取り重み割り当てセクションで、各 DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みを必要に応じて設定します。
たとえば、プライマリインスタンスとその 3 つの DuckDB ベースの分析用読み取り専用インスタンスの読み取り重みをそれぞれ 0、100、200、200 に設定した場合、プライマリインスタンスは読み取りリクエストを処理せず(書き込みリクエストは引き続き自動的に送信されます)、3 つの読み取り専用インスタンスは 1:2:2 の比率で読み取りリクエストを処理します。
説明-
読み取り重みは 0 ~ 10,000 の範囲で設定できます。
-
DuckDB ベースの分析用読み取り専用インスタンスが削除された場合、その重みは自動的に削除されます。他のインスタンスの重みは変更されません。
-
このパラメーターの変更は即時反映され、サービス中断は発生しません。既存の接続は切断されず、新規および既存の接続の両方が新しい重みに基づいてルーティングされます。
-
SQL 実行コストしきい値の設定
自動 HTAP クエリルーティングを有効化すると、SQL 実行コストしきい値はデフォルトで 500,000 に設定されます。ほとんどの場合、このデフォルト値を使用してデータベースリクエストをルーティングできます。
-
推定コストが SQL 実行コストしきい値未満のリクエストは、行指向インスタンス(プライマリインスタンスまたは通常の読み取り専用インスタンス)にルーティングされます。
-
推定コストが SQL 実行コストしきい値を超えるリクエストは、カラムストアインスタンス(DuckDB ベースの分析用読み取り専用インスタンス)にルーティングされます。
ビジネス要件により適したカスタムしきい値を設定する必要がある場合は、次の手順を実行します。
-
ビジネス要件に基づく SQL 実行コストの推定を行います。
-
SQL 実行コストしきい値の設定を行います。
-
RDS コンソールにログインします。左側のナビゲーションウィンドウで、インスタンスをクリックします。上部のナビゲーションバーでリージョンを選択します。
-
インスタンスページで、
アイコンが付いた対象のプライマリインスタンスの ID をクリックします。 -
左側のナビゲーションウィンドウで、データベースプロキシをクリックします。
-
接続情報セクションで、対象のプロキシエンドポイントを見つけ、操作列の設定の変更をクリックします。
-
ダイアログボックスで、HTAP 自動クエリルーティングの SQL 実行コストしきい値を変更し、OKをクリックします。
-
手動ルーティング(ヒントワード
自動ルーティングのパフォーマンスが不十分な場合や、ご利用の MySQL バージョンでコスト見積もりが利用できない場合は、SQL ステートメントにヒントワードを追加して特定のクエリルートを強制できます。ヒントワードは現在の SQL ステートメントにのみ影響します。
-
カラムストアインスタンス(DuckDB ベースの分析用読み取り専用インスタンス)への強制ルーティング
/*force_ap_nodes*/ SELECT COUNT(*) FROM <target_table_name>; -
行指向インスタンス(プライマリインスタンスまたは通常の読み取り専用インスタンス)への強制ルーティング
SELECT /*+set_var(rds_cost_threshold_for_duckdb = 0)*/ COUNT(*) FROM <target_table_name>;
関連ドキュメントおよび関連 API
-
関連 API
-
DescribeDBProxy:データベースプロキシの詳細を照会します。
-
DescribeDBProxyEndpoint:プロキシエンドポイントの情報を照会します。
-
ModifyDBProxyEndpoint:プロキシエンドポイントのアクセスポリシーを設定します。
-
付録:自動 HTAP クエリルーティングの原則
-
データベースプロキシがクエリを受信し、プライマリインスタンスまたは通常の読み取り専用インスタンスなどの行指向インスタンスに転送します。
-
行指向インスタンスのオプティマイザーがクエリを分析し、実行コストが設定されたしきい値を超えるかどうかを推定します。
-
推定実行コストが SQL 実行コストしきい値未満の場合、クエリは行指向インスタンスで実行されます。複数の通常の読み取り専用インスタンスが存在する場合、負荷分散ルールに基づいてクエリがルーティングされます。
-
推定実行コストが SQL 実行コストしきい値を超える場合、クエリはカラムストアインスタンスで実行されます。複数のカラムストアインスタンスが存在する場合、負荷分散ルールに基づいてクエリがルーティングされます。
-