問合せ処理と問合せコーディネータ
問合せコーディネータはシャード・カタログの一部です。問合せコーディネータは、分散データベースに対する問合せ処理サポートを提供します。シャード・カタログの分散データベース・トポロジ・メタデータにアクセスすると、問合せコーディネータが重要な役割を果たす3つの一般的なケースがあります。
-
シャーディング・キーのない単一シャード問合せ
シャーディング・キーがアプリケーションから渡されない場合、問合せコーディネータは、問合せに必要なデータを含むシャードを特定し、そこに問合せを送信して処理します。
-
マルチシャード問合せ
問合せコーディネータは、
SELECT COUNT(*) FROM Customer
などのマルチシャード問合せと呼ばれる複数のシャードからのデータを必要とする問合せにも役立ちます。 -
集計問合せ
問合せコーディネータは、売上データの集計など、レポートで通常使用される集計問合せを処理します。
いずれの場合も、問合せコーディネータのSQLコンパイラは関連するシャードを自動的に識別し、関係するすべてのシャード間で問合せ処理を調整します。
単一シャード問合せのシナリオでは、問合せ全体が単一の参加シャードで処理され、問合せコーディネータは処理された行をクライアントに戻します。
マルチシャード問合せの場合、SQLコンパイラは問合せを分析し、参加シャードによって送信および処理される問合せフラグメントにリライトします。問合せは、関与するシャードでほとんどの問合せ処理が行われて、コーディネータによって集計されるようにリライトされます。
問合せコーディネータは、Oracle Databaseのパラレル問合せエンジンを使用して、マルチシャード問合せをシャードにパラレルに最適化およびプッシュします。各シャードは、保持するデータのサブセットに対して問合せを処理します。次に、結果が問合せコーディネータに戻され、問合せコーディネータがクライアントに返されます。
要するに、シャードは問合せコーディネータによって発行される問合せの計算ノードとして機能します。計算がデータのあるシャードにプッシュされるため、シャードとコーディネータの間のデータの移動が減少します。この仕組みによって、問合せコーディネータの処理負荷ができるだけ多くのシャードに移動するため、リソースを効率的に使用できるようになります。
一貫性レベルの指定
マルチシャード問合せでは、様々な一貫性レベルを指定できます。たとえば、一部の問合せでシャード間のSCN同期のコストを回避する必要がある場合は、それらのシャードをグローバルに分散できます。別のユース・ケースとして、レプリケーション用のスタンバイを使用している場合は、プライマリとそのスタンバイから結果がフェッチされる可能性があるため、マルチシャード問合せで少し古いデータが許容されます。マルチシャード問合せでは、すべてのシャードで最も大きい共通SCNで問合せを発行することによって、グローバルな読込み一貫性(CR)を維持する必要があります。
高可用性およびパフォーマンス
ファスト・スタート・フェイルオーバーを有効にして最大可用性保護モード(データ損失のないフェイルオーバー)でOracle Data Guardを使用して問合せコーディネータを保護することをお薦めします。問合せコーディネータはさらなる可用性およびスケーラビリティのためにオプションでOracle RAC対応にすることができます。マルチシャード問合せワークロードのスケーラビリティおよび可用性を向上させるために、読取り専用モードのOracle Active Data Guardスタンバイ・シャード・カタログ・データベースをマルチシャード問合せコーディネータとして機能させることができます。
集計ユースケースおよびシャーディング・キーを使用しないSQL発行では、直接のキーベースのルーティングに比べてパフォーマンス・レベルが低下します。