Netezza Performance Serverクエリの最適化とUDXコール

クエリを可能な限り高速かつ効率的にすることを目的とした、多くの内部パフォーマンス・アルゴリズムがある。 これらの内部アルゴリズムは、UDX の登録設定および照会設計との組み合わせによって、照会における UDX の呼び出しのタイミングおよび呼び出し頻度に対して予期しない影響を与える場合があります。 例えば、テスト照会のログ・メッセージやプラン・ファイルを確認した場合に、UDX が呼び出されていなかった、あるいは、呼び出し頻度が予期していたより多かったまたは少なかった、ということが見つかる可能性があります。 例:
  • UDF を RETURNS NULL ON NULL INPUT と定義すると、Netezza Performance Serverシステムが UDF への NULL 入力値を検出した場合、UDF をスキップして自動的に NULL 値を返します。
  • UDFをDETERMINISTICとして定義すると、Netezza Performance Serverはクエリ実行中に操作する行ごとにUDFを呼び出すのではなく、ステートメント準備中に1回だけ呼び出すことがあります。 これが起こるのは、UDF の受け取る引数がすべてリテラルである場合、引数がない場合、また、UDF が RETURNS NULL ON NULL INPUT で、引数として 1 つ以上のリテラル NULL が与えられた場合のみです。
  • クエリーが同じ UDF を複数回使用し、UDF が同じ引数を取り、DETERMINISTIC の場合、Netezza Performance Serverのクエリーアルゴリズムは共通部分式除去(CSE)を適用してクエリーパフォーマンスを向上させることができます。 CSEでは、Netezza Performance Serverは関数を一度だけ呼び出して共通の結果を得ます。
  • Netezza Performance Serverのジャスト・イン・タイム(JIT)統計処理は、UDXの呼び出し回数を増やすこともできます。 JIT 統計は、影響を受ける表に対して高速なサンプル照会を実行して、照会のパフォーマンスを評価します。 したがって、この処理は、照会の最良のプランを求めるときに、UDX を複数回照会で呼び出す可能性があります。

最後の2つの例は、Netezza Performance Serverのクエリーパフォーマンスの最適化です。 最初の 2 つの例の状況については、必要であれば、UDF の登録設定を変更してその照会最適化動作を変更することができます。

UDF を NON DETERMINISTIC として登録すると、Netezza Performance Serverシステムは常に関数を呼び出して値を取得します。 (NON DETERMINISTIC 設定は、UDF の呼び出し回数が予期したより多かったということがログに示された理由にもなる可能性があります)。

UDF を CALLED on NULL INPUT として登録すると、Netezza Performance Serverシステムは 1 つ以上の NULL 入力値に対して関数を呼び出します。 その場合は、入力された NULL 値を適切に処理するように関数を設計していなければなりません。

これらの変更に関しては、パフォーマンスへの影響を慎重に検討してください。 使用する UDF が本当に DETERMINISTIC である場合や、NULL 入力に対して NULL を返す場合、これらの照会最適化にはパフォーマンス上の利点があります。 これらの登録オプションについては、テスト環境と実稼働環境で異なる設定を使用した方が良い場合があります。