DB 2ストアドプロシージャベース
自分が参加したプロジェクトで担当しているモジュールは、生産の悪い状況で性能の原因が現れ、時々クエリーのタイムアウトを報告します.
次の3つの要因を分析しました.クエリーのテーブルデータは巨大です.2枚の大きな時計で、1枚は百万級で、もう1枚は千万級です. 論理責任.サブクエリがあり、複数のテーブルを関連付け、集約関数を使用して一部のフィールドを統計し、最後にソートします. 権限制御.直接SQLに権限制御のロジックを追加しました.
全力を尽くして最適化したにもかかわらず、効果は微々たるもので、最後にデータウェアハウスの同僚の提案の下で、ストレージプロセスの使用を試みることを決定し、効果は抜群で、クエリー時間を3 s以下に抑えることに成功した.
そのため、DB 2のストレージプロセスに関する基礎知識をネット上から記録し、必要に応じて記録します.
パラメータ定義
DB 2記憶処理のパラメータは、入出力パラメータと性能関連パラメータの2つの部分に分けられる.
入出力パラメータ
表示方法:入力パラメータ用IN先頭 出力パラメータ用OUT先頭 は入力である、出力パラメータであるINOUT先頭 を用いる.
例を挙げます.
パフォーマンス関連パラメータ
allowed-SQL
allowed-SQL文は、ストレージ中にSQL文を使用するかどうかを指定し、使用する場合はそのタイプを明記します.
タイプ: NO SQL:ストレージプロセスがSQL文 を実行できないことを示す CONTAINS SQL:ストレージ・プロシージャはSQL文を実行できますが、SQLデータは読み込まれません.また、SQLデータ は変更されません. READS SQL DATA:記憶中に修正データが含まれないことを示すSQL、つまりデータベースからのみデータを読み出す MODIFIES SQL DATA:ストレージ・プロシージャが任意のSQL文を実行できることを示します.つまり、データを削除することができます.
Note:デフォルトはMODIFIESSQL DATAです.異なるタイプのストレージプロセスの効率は異なり、NO SQLが最も良く、MODIFIESSQL DATAが最も悪い.
DYNAMIC RESULT SETS N
ストアド・プロシージャが返す結果セットの数を示します.
変数の定義
ストレージ・プロシージャはDECLAREを使用して変数を定義し、その後のプログラムで変数を使用して論理を処理します.
例:
わりあてぶん
SETメソッド
SET money = 10
SET total = (SELECT COUNT(1) FROM TABLE1)
VALUE INTOメソッド
VALUE (100,200,300) INTO val1, val2, val3
SELECT INTO方法
SLECT SUM(A) INTO val1 FROM TABLE2
カーソル
DECLARE cursor文を使用してカーソルを定義し、他の結果セットとカーソル処理をサポートする他の文を指定します.
その申明文法
select-statementは有効なSQLクエリー文で、FOR UPDATE句を指定して、カーソルを更新または削除に使用できます.WITHOUT HOLD/WITH HOLDオプションは、COMMIT操作後のカーソル状態(open/close)を定義します.デフォルトではWITHOUT HOLDです.WITH HOLDオプションを使用してカーソルを定義すると、COMMIT操作後もそのカーソルはOPEN状態のままになります.ROLLBACK操作後、すべてのカーソルは閉じられます.
次の3つの要因を分析しました.
全力を尽くして最適化したにもかかわらず、効果は微々たるもので、最後にデータウェアハウスの同僚の提案の下で、ストレージプロセスの使用を試みることを決定し、効果は抜群で、クエリー時間を3 s以下に抑えることに成功した.
そのため、DB 2のストレージプロセスに関する基礎知識をネット上から記録し、必要に応じて記録します.
パラメータ定義
DB 2記憶処理のパラメータは、入出力パラメータと性能関連パラメータの2つの部分に分けられる.
入出力パラメータ
表示方法:
例を挙げます.
create procedure test{
IN var1 varchar(10),
OUT var2 varchar(10),
INOUT var3 varchar(10)
}
パフォーマンス関連パラメータ
allowed-SQL
allowed-SQL文は、ストレージ中にSQL文を使用するかどうかを指定し、使用する場合はそのタイプを明記します.
タイプ:
Note:デフォルトはMODIFIESSQL DATAです.異なるタイプのストレージプロセスの効率は異なり、NO SQLが最も良く、MODIFIESSQL DATAが最も悪い.
DYNAMIC RESULT SETS N
ストアド・プロシージャが返す結果セットの数を示します.
変数の定義
ストレージ・プロシージャはDECLAREを使用して変数を定義し、その後のプログラムで変数を使用して論理を処理します.
例:
DECLARE temp1 CHAR(10) DEFAULT 'yes';
DECLARE temp2 VARCHAR(10) DEFAULT 'no';
DECLARE temp3 SMALLINT DEFAULT 0;
DECLARE temp4 INTEGER DEFAULT 10;
DECLARE temp5 BIGINT DEFAULT 10000;
DECLARE temp6 DECIMAL(10,2) DEFAULT 100.10;
DECLARE temp7 REAL DEFAULT 10.1;
DECLARE temp8 DOUBLE DEFAULT 10000.1001;
DECLARE temp9 DATE DEFAULT '2014-08-23';
DECLARE temp10 TIME DEFAULT '1:50 PM';
DECLARE temp11 TIMESTAMP DEFAULT '2014-01-01-12.00.00';
DECLARE temp12 BLOB(2G);
DECLARE temp13 CLOB(2G);
わりあてぶん
SETメソッド
SET money = 10
SET total = (SELECT COUNT(1) FROM TABLE1)
VALUE INTOメソッド
VALUE (100,200,300) INTO val1, val2, val3
SELECT INTO方法
SLECT SUM(A) INTO val1 FROM TABLE2
カーソル
DECLARE cursor文を使用してカーソルを定義し、他の結果セットとカーソル処理をサポートする他の文を指定します.
その申明文法
>>-DECLARE--cursor-name--CURSOR---------->
>--FOR--+-select-statement-+-------------><
.-WITHOUT HOLD-.--+--------------+---------------------------------------------|
'-WITH HOLD----'
.-WITHOUT RETURN-------------.
|--+----------------------------+-------------------------------|
| .-TO CALLER-. |'-WITH RETURN--+-----------+-'-TO CLIENT-'
select-statementは有効なSQLクエリー文で、FOR UPDATE句を指定して、カーソルを更新または削除に使用できます.WITHOUT HOLD/WITH HOLDオプションは、COMMIT操作後のカーソル状態(open/close)を定義します.デフォルトではWITHOUT HOLDです.WITH HOLDオプションを使用してカーソルを定義すると、COMMIT操作後もそのカーソルはOPEN状態のままになります.ROLLBACK操作後、すべてのカーソルは閉じられます.