このトピックでは、行列ルーティングメカニズムを使用して、オンライン·トランザクション処理 (OLTP) トラフィックとオンライン分析処理 (OLAP) トラフィックを分離する方法について説明します。
概要
PolarDB-X は、次の 3 種類のインスタンスを提供します。
プライマリインスタンス: トランザクション処理 (TP) ワークロードを処理します。デフォルトでは、このインスタンスは行ストアデータにアクセスし、クラスターエンドポイントを提供します。このエンドポイントは、TP トラフィックの読み書き分離をサポートし、分析処理 (AP) トラフィックを列ストアおよび通常の読み取り専用インスタンスに転送します。
読み取り専用インスタンス: TP ワークロードの読み取りトラフィックを処理します。デフォルトでは、行ストアデータにアクセスし、プライマリインスタンスから物理的に分離されています。個別のエンドポイントを提供できます。このインスタンスは、多くの場合、アプリケーションレベルの読み書き分離または抽出·変換·書き出し (ETL) シナリオで使用されます。
列ストア読み取り専用インスタンス: AP ワークロードの読み取りトラフィックを処理します。列ストアデータへのアクセスのみを許可し、プライマリインスタンスから物理的に分離されています。個別のエンドポイントを提供できます。このインスタンスは、多くの場合、データ分析に使用されます。
行ストアから列ストアへのデータ同期には、数秒のレイテンシーがあります。このレイテンシーによって発生する可能性のあるデータ不整合の問題を防ぐため、プライマリインスタンスと読み取り専用インスタンスは、デフォルトで行ストアデータにのみアクセスできます。
SQL 文を列ストア読み取り専用インスタンスにルーティングして実行するには、SQL 文に次のプレフィックスを追加します。
/*+TDDL: workload_type=ap enable_columnar_optimizer=true*/
列ストア読み取り専用インスタンスを持つプライマリインスタンスのルーティングメカニズム
ハイブリッドワークロードシナリオ
OLAP と OLTP の SQL クエリが同じデータベース接続を使用する必要がある場合は、プライマリインスタンスのクラスターエンドポイントを使用できます。システムは、SQL クエリのスキャンコストに基づいてトラフィックを自動的にルーティングします。OLAP トラフィックは列ストア読み取り専用インスタンスにルーティングされます。OLTP トラフィックは、引き続きプライマリインスタンスで処理されます。
自動ルーティングルール:
推定スキャンコストがしきい値を超える読み取りトラフィックは、AP トラフィックとして識別されます。SQL 文は、実行のために列ストア読み取り専用インスタンスに自動的にルーティングされます。
推定スキャンコストがしきい値未満の読み取りトラフィック、トランザクション内の読み取りトラフィック、および書き込みトラフィックは、TP トラフィックとして識別されます。SQL 文は、実行のためにプライマリインスタンスに自動的にルーティングされます。
プライマリインスタンスに複数の列ストア読み取り専用インスタンスがある場合、システムは自動的に Massively Parallel Processing (MPP) を使用してスケジューリングと実行を行います。
自動ルーティングを設定するには:
PolarDB-X コンソールにログオンします。
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、[PolarDB-X 2.0] タブをクリックします。
ターゲットプライマリインスタンスの ID をクリックして、[基本情報] ページを開きます。
[接続情報] セクションで、[設定管理] をクリックします。
[設定管理] ダイアログボックスで、次の操作を実行します。
[リソース設定] セクションで、[利用可能なインスタンス] リストからターゲットの列ストア読み取り専用インスタンスを選択し、[選択されたインスタンス] リストに移動します。
[列指向データの読み取り専用設定] セクションで、[有効化] をクリックし、次に [OK] をクリックします。
列ストア読み取り専用インスタンスとプライマリインスタンス間のデータ同期には、数秒のレイテンシーがあります。アプリケーションがプライマリインスタンスと列ストア読み取り専用インスタンス間の強力なデータ整合性を必要とする場合は、自動ルーティングメカニズムを使用しないでください。
分離されたワークロードシナリオ
OLAP サービスと OLTP サービスが異なるアプリケーションを使用してデータベースにアクセスする場合、アプリケーションごとに異なるエンドポイントを設定できます。OLTP アプリケーションをクラスターエンドポイントに接続し、OLAP アプリケーションを列ストア読み取り専用インスタンスのエンドポイントに接続します。このメソッドは、プライマリインスタンスと列ストア読み取り専用インスタンス間のトラフィックを分離します。
読み取り専用インスタンスを持つプライマリインスタンスのルーティングメカニズム
透明な読み書き分離
PolarDB-X は、強力な整合性を備えた透明な読み書き分離を提供します。このソリューションの主な利点は、アプリケーションコードを変更する必要がないことです。プライマリインスタンスのクラスターエンドポイントに接続するだけです。システムは、設定可能な割合の読み取りトラフィックを読み取り専用インスタンスに自動的にルーティングします。
透明な読み書き分離を設定するには:
PolarDB-X コンソールにログオンします。
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、[PolarDB-X 2.0] タブをクリックします。
ターゲットプライマリインスタンスの ID をクリックして、[基本情報] ページを開きます。
[接続情報] セクションで、[設定管理] をクリックします。
[設定管理] ダイアログボックスで、次の操作を実行します。
[リソース設定] セクションで、[利用可能なインスタンス] リストからターゲットの行ストア読み取り専用インスタンスを選択し、[選択されたインスタンス] リストに移動します。
[行ストアの読み取り専用設定] セクションで、必要に応じて項目を設定します。
設定項目:
設定項目
オプション
説明
強整合性読み取り
強力な整合性
読み取り専用 DN にルーティングされたリクエストは、最新のデータを読み取ることができます。読み取り専用 DN のレイテンシーがしきい値を超えた場合、システムはリクエストを通常のレイテンシーを持つ別の読み取り専用 DN (利用可能な場合) またはプライマリインスタンスに自動的にルーティングします。リクエストをプライマリインスタンスにルーティングするには、[読み取り専用トラフィックをプライマリインスタンスにフェイルバックする] を [有効化] に設定する必要があります。
弱い整合性
読み取り専用 DN にルーティングされたリクエストは、その DN で利用可能な最新のデータのみを読み取ることができます。
MPP クエリ高速化を有効にする
有効化/無効化
統計に基づいてコストを推定し、複雑な AP クエリを読み取り専用インスタンス (CN+DN) にルーティングして MPP 高速化を実現します。
読み書き分離
読み取り専用インスタンスにルーティングされるトラフィックの割合
元々プライマリインスタンスの DN に送信されていたプッシュダウンクエリの一定の割合を、読み取り専用 DN にルーティングします。
読み取り専用インスタンスのレイテンシーしきい値 (秒)
読み取り専用 DN のレイテンシーがこのしきい値を超えた場合、システムはリクエストを通常のレイテンシーを持つ別の読み取り専用 DN (利用可能な場合) またはプライマリインスタンスに自動的にルーティングします。リクエストをプライマリインスタンスにルーティングするには、[読み取り専用トラフィックをプライマリインスタンスにフェイルバックする] を [有効化] に設定する必要があります。
読み取り専用トラフィックをプライマリインスタンスにフェイルバックする
有効にすると、読み取り専用 DN のレイテンシーがしきい値を超えた場合に、読み取りトラフィックがプライマリインスタンスにフェイルバックされます。
[OK] をクリックします。
手動の読み書き分離
アプリケーションレベルで読み書き分離を実装するには、書き込み操作用にプライマリインスタンスのエンドポイントを、読み取り操作用に読み取り専用インスタンスのエンドポイントを設定して、異なるエンドポイントを使用します。このソリューションの主な特徴は、読み取りトラフィックと書き込みトラフィックが互いに分離されることです。
単一プライマリインスタンスのルーティングメカニズム
プライマリインスタンスしかない場合、アプリケーションはデフォルトで行ストアデータにのみアクセスできます。
よくある質問
プライマリインスタンスと列ストア読み取り専用インスタンスを購入した後、列ストアを使用してクエリを高速化するにはどうすればよいですか?
A: 列ストア読み取り専用インスタンスは、次の 2 つの方法のいずれかで使用できます。
列ストア読み取り専用インスタンスのエンドポイントに接続して、列ストアデータに直接アクセスします。この方法は、どのクエリを列ストアで実行すべきかがわかっている場合に適しています。詳細については、「分離されたワークロードシナリオ」セクションをご参照ください。
プライマリインスタンスのクラスターエンドポイントに接続します。データベースは、クエリコストに基づいて複雑なクエリを列ストア読み取り専用インスタンスに自動的にルーティングします。この方法は、クエリタイプを手動で分類する必要がないため、ハイブリッドワークロードシナリオに適しています。詳細については、「ハイブリッドワークロードシナリオ」セクションをご参照ください。
統計に基づくコスト計算が不正確で、クエリが期待どおりに列ストア読み取り専用インスタンスにルーティングされないことがありますか?
A: はい、ありえます。統計は定期的に収集されるため、古くなる可能性があります。これにより、スキャンコストの計算が不正確になり、予期しないクエリルートが発生する可能性があります。重大な複雑なクエリについては、列ストア HINT を SQL 文にバインドできます。これにより、これらの SQL 文が常に列ストア読み取り専用インスタンスにルーティングされて実行されるようになります。
アプリケーションコードを変更せずに、列ストア HINT を特定の SQL 文にバインドするにはどうすればよいですか?
A: PolarDB-X は、実行計画管理機能を提供します。この機能を使用して、ルーティングルールを特定の SQL 文にバインドできます。データベースは、このタイプの SQL 文を列ストア読み取り専用インスタンスに自動的にルーティングします。
列ストア読み取り専用インスタンスでのクエリパフォーマンスが、プライマリインスタンスよりも大幅に優れているわけではありません。これを解決するにはどうすればよいですか?
A: 列ストア読み取り専用インスタンスは通常、複雑なクエリを実行しますが、これにはインスタンスの仕様に対する高い要件があります。パフォーマンスを向上させるには、少なくとも 32 CPU コアを持つ列ストア読み取り専用インスタンスの購入を検討してください。これらのインスタンスは、非常にコスト効率が高いです。