ユーザーガイド > 性能調整 > スタースキーマ半結合
 
スタースキーマ半結合
スタースキーマ半結合は、複数の結合を持つクエリーに似ています。次のクエリートポロジーについて考えてみましょう。
ここで、結合のON句はD1とD2の両方をFに接続するもので、結合はどちらも内部結合です。この場合、2つの半結合(1つはD1からF、もう1つはD2からF)が可能です。どちらも同じデータソースをターゲットにしているためです。
データソースが十分に堅牢である場合は、TDV Serverでデータソースをマークし、データソースが複数の結合ノードのスタースキーマ半結合最適化をサポートしていることをクエリーエンジンに認識させることができます。Studioでは、データソース構成ペインの[Info(情報)]> [Advanced(詳細)]タブに、[Supports Star Schema(スタースキーマのサポート)]プロパティがあります。
[Supports Star Schema(スタースキーマのサポート)]チェックボックスが有効になっている場合、TDVクエリーエンジンは、半結合最適化を使用して両方の結合を実行できることを認識します。
これを明示的に有効にする必要がある理由は、ソース側が大きい1つの半結合でさえもターゲットデータソースに大きな負荷をかける可能性があり、複数の結合が同じデータソースを同時にターゲットにする場合、一部のデータソースがその負荷に圧倒される可能性があるためです。スタースキーマ半結合では、ターゲットデータソースの処理能力を超えるSQL文字列を簡単に生成できます。したがって、この設定は、ターゲットデータソースが非常に強力な場合、またはすべてのソース側がかなり小さい場合に役立ちます。
スタースキーマクエリーでターゲット側に送信されるSQLがデータソースのSQLの最大長を超える場合、エンジンは、可能な場合にはパーティション分割された半結合で実行するか、一部の結合の半結合最適化を無効にします。
パーティション分割された半結合は、スタースキーマ半結合に常に適用されるとは限りません。Fをターゲットにする結合がn個あり、そのうちの1つを除くすべての結合が短いIN句を生成する場合でも、クエリーエンジンは半結合の長い側をパーティション分割できます。すべての結合がほぼ同じサイズのIN句を生成する場合、パーティション分割は役に立たない可能性があります。この場合、TDVクエリーエンジンは、最長のSQL文字列を生成する結合の半結合最適化を無効にします。残りのすべての結合の合計SQLがターゲットデータソースの処理能力の範囲内になるか、パーティション分割がオプションになるまで、半結合最適化を無効のままにします。
スタースキーマ半結合のため、パーティション分割できる述語は最大で1つです。クエリーで複数の結合にpartition_sizeオプションが指定されている場合、これらの要求の1つしか満たすことができません。
設定については、「半結合構成パラメーターの設定」を参照してください。
特定のデータソースの設定を上書きできます。
データソースの上書きは、特定のデータソースが半結合のターゲットである場合に適用されます。通常、これらの値はサーバーレベルで控えめに設定され、必要に応じて特定のデータソースに対して上書きされます。
ターゲットデータソースでは、半結合によって生成される潜在的に大きな述語を処理する負荷があり、ソース側からのクエリー述語のサイズに制限を課す必要があります。