SHARD_ENABLE句

SHARD_ENABLEキーワードは、定義された関数を参照する問合せをシャードされたデータベース(SDB)のシャードにプッシュ・ダウンできることを示します。

SHARD_ENABLE句を使用する場合、問合せオプティマイザはPL/SQLファンクションの実行をシャードにプッシュするイニシアチブを取ります。

SHARD_ENABLE句は、次のSQL文に指定できます。

SHARD_ENABLEキーワードを使用して作成されたPL/SQLファンクションを使用した問合せは、可能な場合はシャードにプッシュ・ダウンされ、マルチシャード問合せとして実行されます。可能な場合は、プッシュダウンを許可しない問合せに他の部分がある可能性があることを意味します。したがって、オプティマイザはプッシュダウンの決定を行います。

SHARD_ENABLEキーワードなしで作成されたPL/SQLファンクションを使用した問合せは、シャードにプッシュ・ダウンされず、コーディネータでクロス・シャード問合せとして実行されます。

構文

shard_enable_clause ::=

セマンティクス

shard_enable_clause

使用上のノート

ファンクションの実行をシャードにプッシュできるかどうかを決定するのは、ユーザーの判断によります。ただし、次のように、場合によっては、shard_enableを使用しないことを決定する必要があります。
  • シャードおよびコーディネータで異なる可能性のあるセッション・コンテキスト変数を参照するファンクション。

  • シャードおよびコーディネータで異なる可能性があるグローバル変数を参照するファンクション。

  • コーディネータにローカルなデータを参照するファンクション。

場合によっては、パッケージのグローバル変数を参照するか、表からデータを読み取るのであっても、ファンクションをプッシュしても安全であると判断できることがあります。

PL/SQLファンクションにSHARD_ENABLE句が指定されている場合でも、コーディネータで評価が発生する必要があることがあります。つまり、ファンクションの評価はシャードにプッシュされません。考えられるシナリオは次のとおりです。

  • ファンクションがSELECTリスト内にあり、シャード表と結合の間に結合があり、シャーディング・キーに結合がない場合(シャーディング・キーと重複キー間の結合は問題ないことに注意してください)

  • ファンクションがSELECTリストにあり、ローカル(非シャード)表との結合がある場合

  • このようなファンクションがWHERE句に存在し、複数のシャード表の列として入力パラメータを取得し、シャーディング・キーに結合がない場合。

適用可能なファンクションを、クロス・シャード問合せでなく、マルチ・シャード問合せとして実行するためにシャードにプッシュ・ダウンすると、次の方法でパフォーマンスが大幅に向上します。

  • 各シャードでPL/SQLファンクションの評価を実行して計算を分散します。

  • 述語にPL/SQLファンクションが含まれる場合にシャードから返されるデータのサイズを小さくすると、コーディネータでの結合の入力が小さくなります。

関連トピック

その他のドキュメント: