プロシージャーおよび関数のパフォーマンスの向上

ストアード・プロシージャーまたはユーザー定義関数 (UDF) を作成する場合に、SQL プロシージャー型言語プロセッサーは、常に最も効率的なコードを生成するわけではありません。 しかし、データベース・エンジンの呼び出し回数を減らし、パフォーマンスを向上させることができます。

ルーチンの設計で行う変更と、インプリメンテーションで行う変更があります。例えば、C 言語コンパイラーがホスト変数を処理する方法と、SQL プロシージャー型プロセッサーが処理するホスト変数を要求する方法の相違によって、 データベース・エンジンに多くの呼び出しがなされる場合があります。 これらの呼び出しは多くのリソースを必要とするため、何度も呼び出されると、パフォーマンスが著しく低下します。

IBM® i 6.1 リリースでは、SQL ルーチン内で生成されるコードのパフォーマンスが大幅に改善されました。 IBM i 6.1 になる前から再ビルドされていない SQL プロシージャーまたは関数がある場合は、 改善されたコード生成機能が確実に反映されるように、プロシージャーまたは関数をドロップして再作成することをお勧めします。

SQL プロシージャーのパフォーマンスを改善するための別の簡単な操作として、PROGRAM TYPE SUB 節を使用する方法があります。 これを省略したとき、または CREATE PROCEDURE (SQL) ステートメントで PROGRAM TYPE MAIN を使用したときには、 そのプロシージャーのために ILE C プログラム (*PGM) が作成されます。 PROGRAM TYPE SUB を使用すると、そのプロシージャーのために ILE C サービス・プログラム (*SRVPGM) が作成されます。 PROGRAM TYPE SUB を使用する場合の影響が最も大きいのは、パフォーマンスが重要なアプリケーション内で頻繁に呼び出されるプロシージャーの場合です。 ILE サービス・プログラムは活動化グループごとに 1 回だけ活動化されますが、 ILE プログラムは呼び出しごとに活動化されるため、PROGRAM TYPE SUB を使用するプロシージャーのパフォーマンスの方が優れています。 ILE 活動化のコストは、プロシージャーのサイズ、複雑さ、パラメーターの数、変数の数、およびパラメーターと変数のサイズに関連しています。

PROGRAM TYPE SUB を使用するときに注意する必要のある唯一の機能上の違いは、 EXTERNAL_NAME 列の QSYS2.SYSROUTINES カタログ項目にエクスポート名とサービス・プログラム名が共に表示されるようにフォーマット設定されることです。