PolarDB-X のハイブリッドトランザクションおよび分析処理(Hybrid Transactional and Analytical Processing:HTAP)により、専用の分析システムを導入せずに、同一のデータベースクラスター上でオンライントランザクション処理(OLTP)およびオンライン分析処理(OLAP)ワークロードを実行できます。オプティマイザーはコストに基づいてクエリを適切な実行エンジンに自動的にルーティングするため、デフォルトでは AP ワークロードが読み取り専用インスタンスに送信されます。本ドキュメントで説明するツールを活用して、ルーティング動作を確認し、デフォルト設定がワークロードに適合しない場合にオーバーライドしてください。
構成要素
| 構成要素 | 役割 |
|---|---|
| プライマリインスタンス | 書き込みリクエストおよびトランザクション処理(TP)ワークロードを処理します |
| 読み取り専用インスタンス | 分析処理(AP)ワークロードを処理します。超並列処理(MPP)により高速化されます |
| クラスターエンドポイント | TP および AP クエリを自動的に分割するためのインテリジェントなルーティングを適用します |
| 読み取り専用ルートエンドポイント | 読み取り専用インスタンスに直接ルーティングします。オフライン分析に最適です |
HTAP クラスター
PolarDB-X のプライマリインスタンスは、汎用的なオンラインビジネスを処理します。HTAP を有効化するには、プライマリインスタンスに対して 1 台以上の読み取り専用インスタンスを購入してください。詳細については、「読み取り専用インスタンス」をご参照ください。
使用するエンドポイントの選択:
オンライン HTAP または読み書き分離:クラスターエンドポイントを使用します。PolarDB-X は、インテリジェントなルーティングまたは読み書きの重み付けに基づいてクエリを読み取り専用インスタンスに転送します。
オフライン分析のみ:読み取り専用ルートエンドポイントを使用します。これは読み取り専用インスタンスに直接接続し、MPP によりクエリを高速化します。
エンドポイントの構成については、「読み書き分離の設定」をご参照ください。
ルーティング
PolarDB-X では、インテリジェントなルーティングとルールベースのルーティングの 2 種類のルーティングモードをサポートしています。クラスターエンドポイントを使用する場合、インテリジェントなルーティングはデフォルトで有効になります。この場合、AP ワークロードは設定不要で自動的に読み取り専用インスタンスに送信されます。この動作を変更する必要がある場合にのみ、ルールベースのルーティングまたはヒントを使用してください。
インテリジェントなルーティング
PolarDB-X のオプティマイザーは、スキャン対象行数および CPU・メモリ・I/O・ネットワークなどのリソース消費量を分析することで、各クエリのコストを見積もります。このコストに基づき、クエリを TP または AP ワークロードとして分類し、それに応じてルーティングします。
クエリの分類方法の確認
クエリの前に EXPLAIN COST を実行します。出力の最終行にある WorkloadType を確認してください:
mysql> EXPLAIN COST
SELECT a.k, COUNT(*) cnt FROM sbtest1 a, sbtest1 b
WHERE a.id = b.k AND a.id > 1000
GROUP BY k HAVING cnt > 1300 ORDER BY cnt LIMIT 5, 10;+-----------------------------------------------------------------------------------+
| TopN(sort="cnt ASC", offset=?2, fetch=?3): rowcount = 1.0, cpu = 37.0, ... |
| ... |
| WorkloadType: TP |
+-----------------------------------------------------------------------------------+確認すべき出力フィールド:
| フィールド | 説明 |
|---|---|
rowcount | スキャン対象行数 |
cpu | 消費された CPU リソース |
memory | 消費されたメモリリソース |
WorkloadType | TP または AP |
ヒントによる分類のオーバーライド
分類が不正確な場合、WORKLOAD_TYPE ヒントを使用してワークロードタイプを強制的に指定できます:
-- AP 分類を強制
EXPLAIN COST /*+TDDL:WORKLOAD_TYPE=AP*/
SELECT a.k, COUNT(*) cnt FROM sbtest1 a, sbtest1 b
WHERE a.id = b.k AND a.id > 1000
GROUP BY k HAVING cnt > 1300 ORDER BY cnt LIMIT 5, 10;出力には WorkloadType: AP が表示され、クエリは読み取り専用インスタンスにルーティングされます。このオーバーライドをすべての該当クエリに継続的に適用するには、クエリ単位のヒントではなくプラン管理(Plan Management)を使用してください。「フィードバック機構」をご参照ください。
ルールベースのルーティング
インテリジェントルーティングに加えて、PolarDB-X は、MASTER_READ_WEIGHT パラメーターを使用したルールベースのルーティングをサポートします。このパラメーターは、コンソールの [パラメーター設定] ページで設定します。
| パラメーター | デフォルト値 | 範囲 | 動作 |
|---|---|---|---|
MASTER_READ_WEIGHT | 100 | 0–100 | プライマリインスタンスに送信される読み取りリクエストの割合。残りは読み取り専用インスタンスに送信されます。 |
例:MASTER_READ_WEIGHT=60 を設定すると、60 % の読み取りリクエストがプライマリインスタンスに、40 % が読み取り専用インスタンスに送信されます。複数の読み取り専用インスタンスが利用可能な場合、40 % はそれらの間で自動的に分散されます。
インテリジェントなルーティングとルールベースのルーティングの相互作用
| インテリジェントなルーティング | ルールベースのルーティング(MASTER_READ_WEIGHT) | ルーティング結果 |
|---|---|---|
| 有効 | デフォルト値(100)を維持 | トランザクションおよび書き込みはプライマリインスタンスに送信されます。AP ワークロードは読み取り専用インスタンスに送信されます。TP ワークロードはプライマリインスタンスに留まります(重み = 100)。 |
| 無効 | 0–100 の任意の値を設定 | トランザクションおよび書き込みはプライマリインスタンスに送信されます。すべての読み取り(TP および AP)は重みに基づいて分割されます。 |
インテリジェントなルーティングが有効な場合は、MASTER_READ_WEIGHTを 100(デフォルト)に保ってください。これにより、AP/TP の分割をインテリジェントなルーティングが処理します。MASTER_READ_WEIGHTの値を下げるのは、高い同時実行性を持つ TP 読み取りを読み取り専用インスタンスにオフロードしたい場合のみです。
実行モード
PolarDB-X では、ワークロードの種類および読み取り専用インスタンスの有無に応じて、実行モードを自動的に選択します:
| モード | 適用条件 | 動作 |
|---|---|---|
TP_LOCAL | TP ワークロード(例:プライマリキーに対するポイントクエリ) | シングルノード上のシングルスレッドで実行 |
AP_LOCAL | AP ワークロードであり、読み取り専用インスタンスが購入されていない場合 | シングルノード上の CPU コア間で並列実行(パラレルクエリモードとも呼ばれます) |
MPP | AP ワークロードであり、読み取り専用インスタンスが購入されている場合 | 複数ノード上の CPU コア間で並列実行。分散型の高速化が可能です |
実行モードの確認
EXPLAIN PHYSICAL を実行し、出力の最初の行にある ExecutorType を確認してください:
mysql> EXPLAIN PHYSICAL
SELECT a.k, COUNT(*) cnt FROM sbtest1 a, sbtest1 b
WHERE a.id = b.k AND a.id > 1000
GROUP BY k HAVING cnt > 1300 ORDER BY cnt LIMIT 5, 10;+-----------------------------------------------------------------------------------+
| ExecutorType: MPP |
| The Query's MaxConcurrentParallelism: 2 |
| Fragment 1 |
| Output partitioning: SINGLE [] Parallelism: 1 |
| TopN(sort="cnt ASC", offset=?2, fetch=?3) |
| ... |
| Fragment 0 |
| Output partitioning: SINGLE [] Parallelism: 1 Splits: 16 |
| LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, ...) |
+-----------------------------------------------------------------------------------+最初の行に ExecutorType: MPP が表示されれば、MPP が有効であることを確認できます。また、出力には各フラグメントの並列処理の次数も表示されます。
実行モードのオーバーライド
EXECUTOR_MODE ヒントを使用して、特定の実行モードを強制的に指定できます。プライマリインスタンスに余剰のリソースがあり、読み取り専用インスタンスへのルーティングを回避してクエリをローカルで高速化したい場合に使用します:
-- シングルノード並列モードを強制
EXPLAIN PHYSICAL /*+TDDL:EXECUTOR_MODE=AP_LOCAL*/
SELECT a.k, COUNT(*) cnt FROM sbtest1 a, sbtest1 b
WHERE a.id = b.k AND a.id > 1000
GROUP BY k HAVING cnt > 1300 ORDER BY cnt LIMIT 5, 10;MPP の並列処理の次数のオーバーライド
MPP の並列処理の次数は、高い同時実行性に対応できるよう保守的に算出されます。手動で増加させるには、EXECUTOR_MODE=MPP と MPP_PARALLELISM ヒントを併用します:
/*+TDDL:EXECUTOR_MODE=MPP MPP_PARALLELISM=8*/
SELECT a.k, COUNT(*) cnt FROM sbtest1 a, sbtest1 b
WHERE a.id = b.k AND a.id > 1000
GROUP BY k HAVING cnt > 1300 ORDER BY cnt LIMIT 5, 10;並列処理の次数は、スキャン対象行数、インスタンスの仕様、および関与するテーブルシャード数に基づいて算出されます。
スケジューリングポリシー
クラスターエンドポイントに関連付けられた読み取り専用インスタンスが複数ある場合、PolarDB-X はラウンドロビン方式ではなく、各ノードのリソース負荷に基づいてクエリをスケジューリングします。高遅延の読み取り専用インスタンスへのクエリ送信を回避するために、読み取り専用インスタンスのレイテンシーを基準メトリックとして使用します。これにより、手動介入なしでワークロードを均等に分散できます。
フィードバック機構
ワークロードの分類は統計に基づくため、クエリが誤って分類される場合があります。このような場合、PolarDB-X は適応型フィードバック機能により、分類を自動的に修正できます。
適応型フィードバックの動作:
TP と分類されたクエリがスキャン対象行数および実行時間のしきい値を超えた場合、PolarDB-X はプラン管理(Plan Management)においてそのクエリを AP として再分類します。AP ワークロードと分類されたクエリにも同様のルールが適用されます。
更新された分類は、同じ実行計画テンプレートに一致するすべてのクエリに適用されます。
プラン管理におけるワークロード割り当ての確認
BASELINE [Select Statement]ワークロードタイプの手動再分類
適応型フィードバックがまだトリガーされていない場合、プラン管理で再分類を手動で強制できます:
BASELINE FIX SQL /*+TDDL:WORKLOAD_TYPE=AP*/ [Select Statement]プラン管理でワークロードタイプを更新した後、同じ計画テンプレートを持つすべてのクエリに正しい分類が適用されます。詳細については、「実行計画管理」をご参照ください。
読み取り整合性
クラスターエンドポイントを使用する場合、デフォルトでグローバルな読み取り整合性が有効になります。これにより、読み取り専用インスタンスでのクエリは、常にプライマリインスタンスにコミット済みのデータを参照でき、レプリケーションの遅延による古くなったデータの読み取り(stale read)を防止します。
セッションまたはクエリ単位で読み取り整合性を無効化
ワークロードがレプリケーションの遅延を許容し、オーバーヘッドを削減したい場合、以下のいずれかの方法で読み取り整合性を無効化できます:
「[パラメーター設定]」ページで、
ENABLE_CONSISTENT_REPLICA_READをfalseに設定します(インスタンス全体に適用されます)。クエリ単位でヒントを使用します:
/*+TDDL:ENABLE_CONSISTENT_REPLICA_READ=false*/ [Select Statement]特定のクエリのみが古くなったデータの読み取りを許容する場合に、クエリ単位のヒントを使用してください。グローバルに整合性を無効化するのは避けてください。
よくある質問
インテリジェントなルーティングを有効化した後に MASTER_READ_WEIGHT を設定する必要がありますか?
高い同時実行性を持つ TP ワークロードを読み取り専用インスタンスにオフロードしたい場合にのみ設定が必要です。インテリジェントなルーティングでは、AP ワークロードが既に自動的に読み取り専用インスタンスに送信されます。TP ワークロードが重すぎてプライマリインスタンスのリソースが飽和している場合、MASTER_READ_WEIGHT を 100 未満に設定することで、一部の TP 読み取りを読み取り専用インスタンスにも送信できます。
クラスターエンドポイントに基づく読み書き分離は、従来の割合による読み書き分離と互換性がありますか?
PolarDB-X では、インテリジェントなルーティングとルールベースのルーティングの 2 つのモードをサポートしています。ルールベースのルーティングは、従来の読み書き分離モードと互換性があります。PolarDB-X の読み書き分離の利点は、読み取りの同時実行性をサポートしている点です。これにより、読み取り専用インスタンスにおけるレプリケーションの遅延によって読み取りデータと書き込みデータの不整合が発生するリスクを低減できます。
クエリに割り当てられたワークロードタイプを確認する方法と、誤った場合の修正方法を教えてください。
EXPLAIN COST を実行して、実行計画の出力に表示される WorkloadType を確認してください。分類が誤っている場合は、一時的なオーバーライドに WORKLOAD_TYPE ヒントを使用するか、BASELINE FIX SQL を使用して、プラン管理で同じ計画テンプレートを持つ今後のすべての実行に修正を永続化できます。
PolarDB-X HTAP は、OLTP + DTS + OLAP の組み合わせと比較してどのようなメリットがありますか?
PolarDB-X HTAP では、データベースのネイティブなマルチレプリカ機能を活用して、OLTP および OLAP のトラフィックを同時に処理します。これにより、Data Transmission Service(DTS)を介したデータエクスポートの必要性がなくなり、運用および保守(O&M)のオーバーヘッドが削減されます。さらに、グローバルな読み取り整合性と MPP 加速を備え、ライブデータに対するリアルタイムかつスケーラブルな分析を可能にします。