► CREATE PROCEDURE QSYS2.CHANGE_PLAN_CACHE_SIZE ( IN SIZE_IN_MEG INTEGER )
2. ストアードプロシージャーの実行
► SQLインターフェースから下記コマンドを実行
► CALL qgpl.crtcndidx ('QSYS2', 'SYSIXADV', ‘xxxxxxxx')
xxxxxxx:推奨インデックスを作成したいライブラリー名
サンプル利用上の注意点
►
作成されるインデックスの名称は、「IDX_基になるTABLE名_連番」で作成されます。
►
同一のライブラリーに複数回実施する場合、インデックス名が重複するためエラーとなります。
►
システムが推奨するINDEXの内容は、DB関連のPTFを適用などにより、推奨される判断基準が変わること があります。そのため、DB2のグループPTF適用後には、
IBM i Navigator の索引アドバイザーの機能を使用し、新たに推奨されたINDEXがないかを確認ください。現行のINDEXの内容と大きな差があった場合、既 存のINDEXを削除した後、本プロシージャーを再度実行し、新しい推奨INDEXを作成することで、良好なパ フォーマンスを得られることがあります。
当サンプルは「index_adviceプロシージャー」の利用例を示すことを目的としており、IBMとして稼働を保証するものではありません。
サンプル利用者の責任においての実施となることをご了承ください。
© 2011 IBM Corporation
58
推奨インデックス一括作成のスクリプトサンプル( 1/2 )
create procedure qgpl.crtcndidx (IN adv_libCHAR(10), adv_file CHAR(10), tgt_lib CHAR(10)) LANGUAGE SQL
SET OPTION OUTPUT=*PRINT,DBGVIEW=*SOURCE BEGIN
DECLARE sql_stmt1 VARCHAR(300); /* 実行SQLステートメント格納用 */
DECLARE sql_stmt2 VARCHAR(10000); /* 実行SQLステートメント格納用 */
DECLARE t_idxVARCHAR(360); /* インデックス名 生成用*/
DECLARE cnt NUMERIC; /* カウンター*/
/* 結果受け取り用 */
DECLARE table_name VARCHAR(258);
DECLARE key_columns_advised VARCHAR(1600);
DECLARE index_type CHAR(14);
DECLARE table_schema VARCHAR(128);
/* 制御用 */
DECLARE not_found INT DEFAULT 0;
DECLARE cur1 CURSOR FOR sql1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found= 1;
/* 複製された SYSIXADV を用いてQTEMPに情報を構築する */
CALL QSYS2.index_ADVICE(adv_lib , adv_file, 0);
/* 複製された SYSIXADV を用いてQTEMPに情報を構築する */
CALL QSYS2.index_ADVICE(adv_lib , adv_file, 0);
/* 圧縮された推奨インデックス情報を取得するSQL文 */
SET sql_stmt1 = 'select TABLE_SCHEMA , TABLE_NAME , KEY_COLUMNS_ADVISED , INDEX_TYPE from QTEMP.CONDENSEDINDEXADVICE where SYSTEM_TABLE_SCHEMA = ?';
PREPARE sql1 FROM sql_stmt1;
© 2011 IBM Corporation
59
推奨インデックス一括作成のスクリプトサンプル( 2/2 )
/* カーソル・オープン*/
OPEN cur1 USING tgt_lib;
FETCH cur1 INTO table_schema, table_name, key_columns_advised, Index_type ; SET cnt = 1;
WHILE not_found =0 DO
/* INDEX名生成:インデックス名の先頭にIDX_を使用し、作成されたインデックスであることを判別*/
SET t_idx = 'IDX_' || table_name|| '_' || CHAR(cnt) ;
/* INDEX_typeが RADIXの場合基数索引を、ENCODED VECTORの場合コード化ベクトル索引を作成*/
CASE
WHEN INDEX_type = 'RADIX' THEN
SET sql_stmt2 = 'create INDEX ' || table_schema|| '.' || t_idx|| ' ON ' || table_schema|| '.' || table_name || '(' ||
key_columns_advised|| ')';
WHEN INDEX_type = 'ENCODED VECTOR' THEN
SET sql_stmt2 = 'create encoded vector INDEX ' || table_schema|| '.' || t_idx || ' ON ' || table_schema|| '.' || table_name|| '(' ||
key_columns_advised|| ')';
ELSE
SET sql_stmt2 = 'create INDEX ' || table_schema|| '.' || t_idx|| ' ON ' || table_schema|| '.' || table_name || '(' ||
key_columns_advised|| ')';
END CASE;
/* 生成された推奨インデックスを作成するsql文を実行 */
PREPARE sql2 FROM sql_stmt2;
EXECUTE sql2;
SET cnt = cnt+ 1;
FETCH cur1 INTO table_schema, table_name, key_columns_advised , INDEX_type ; END WHILE;
CLOSE cur1;
END;
© 2011 IBM Corporation
60
Tips2 :一時インデックスの一括オブジェクト化
指定回数使用した一時インデックスを一括でオブジェクト化するプロシージャー
► オプティマイザーが必要と判断し、既に作成済みの「一時インデックス」のうち、利用 回数が一定回数を越えた一時インデックスをオブジェクト化するプロシージャー
► 既に一時インデックスとして作成されており、かつ一定数の利用が確認できることか ら、高確率で必要なインデックスを作成可能
サンプル
► 1,000 回以上使用されている一時インデックスをオブジェクトにする場合
CALL SYSTOOLS.ACT_ON_INDEX_ADVICE ( '<library-name>', NULL, NULL, 1000, NULL)
( <library-name> は、そのライブラリーの中のテーブルについて当該処理を実行)
前提条件
► IBM i 6.1:SI35751
► IBM i 7.1:提供なし(2011/12/14時点)
参考情報
► SE38389 - OSP-DB Extend Index Advisor
http://ibm.co/sB3C39
© 2011 IBM Corporation
61
Tips3 :指定条件のインデックスの一括削除
指定条件のインデックスを一括削除するプロシージャー
► 不要なインデックスはシステム負荷につながるため一定期間利用していないイン デックスや、一定回数を満たないインデックスを削除するプロシージャー
サンプル
► 作成されたインデックス (*) について、一定期間(たとえば 7 日間)に一定の回数(たと えば 500 回以下)しか使用されなかったインデックスを削除する場合
CALL SYSTOOLS.REMOVE_INDEXES( '<library-name>', 500, ' 7 days ')
前提条件
► IBM i 6.1 + SF99601 Level 21(SI45174)
► IBM i 7.1 + SF99701 Level 12
参考情報
► OSP-DB ADD SYSTOOLS.REMOVE_INDEXES
http://ibm.co/vOYfoP
© 2011 IBM Corporation
62
参考情報
developerWorks : DB2 for i - Technology Updates (英語)
► DB2 for i 最新情報(新機能・機能拡張)
http://ibm.co/rX2INe
developerWorks : IBM DB2 for i – Technical topics (英語)
► http://www.ibm.com/developerworks/data/products/db2i5OS/
IBM i 7.1 テクニカル・ワークショップ 2010春:DB2 for i & DB2 Web Query 最新情報
► IBM i 7.1 DB2 for i の最新情報
http://www.ibm.com/systems/jp/i/library/
IBM i 最新情報・勉強会 ~2009 冬~ :『2. 使ってみよう、IBM i 最新機能』
►
データベースオブジェクトのSQLからの作成
► SQLのパフォーマンス・チューニング QZDASOINITの設定
►
ビジュアル・エクスプレインの利用ガイド、Tipsなどが
http://www.ibm.com/systems/jp/i/library/pdf/20090202.pdf
DB2 UDB for iSeries パフォーマンス改善のポイント
►
特にこれまで
iSeries 経験のない方に向けた、DB2 UDB for iSeries (DB2/400) のパフォーマンス・チューニング・ガイドです。
https://www.ibm.com/support/docview.wss?uid=stda0ed433be2352c56249256e7d0002bdcb
© 2011 IBM Corporation
63