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ファンクションが含まれる場合にシャードから返されるデータのサイズを小さくすると、コーディネータでの結合の入力が小さくなります。