DB 2ストアドプロシージャベース


自分が参加したプロジェクトで担当しているモジュールは、生産の悪い状況で性能の原因が現れ、時々クエリーのタイムアウトを報告します.
次の3つの要因を分析しました.
  • クエリーのテーブルデータは巨大です.2枚の大きな時計で、1枚は百万級で、もう1枚は千万級です.
  • 論理責任.サブクエリがあり、複数のテーブルを関連付け、集約関数を使用して一部のフィールドを統計し、最後にソートします.
  • 権限制御.直接SQLに権限制御のロジックを追加しました.

  • 全力を尽くして最適化したにもかかわらず、効果は微々たるもので、最後にデータウェアハウスの同僚の提案の下で、ストレージプロセスの使用を試みることを決定し、効果は抜群で、クエリー時間を3 s以下に抑えることに成功した.
    そのため、DB 2のストレージプロセスに関する基礎知識をネット上から記録し、必要に応じて記録します.
    パラメータ定義
    DB 2記憶処理のパラメータは、入出力パラメータと性能関連パラメータの2つの部分に分けられる.
    入出力パラメータ
    表示方法:
  • 入力パラメータ用IN先頭
  • 出力パラメータ用OUT先頭
  • は入力である、出力パラメータであるINOUT先頭
  • を用いる.
    例を挙げます.
    create procedure test{
        IN var1 varchar(10),
        OUT var2 varchar(10),
        INOUT var3 varchar(10)
    }

    パフォーマンス関連パラメータ
    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を使用して変数を定義し、その後のプログラムで変数を使用して論理を処理します.
    例:
    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操作後、すべてのカーソルは閉じられます.