テーブルについているインデックスのリストと評価 (V5R2/V5R3 以降)

iSeries Access V5R3 から、iSeries ナビゲーターで、あるテーブルについているインデックスのリストを出すことができるようになりました。

この機能のいいところは、あるテーブルについているすべてのインデックスをリストできる、そしてそれぞれのサイズやページ数などいった情報を確認できるということもありますが、それだけではありません。
さらにそれぞれのインデックスについて、以下の "Last Query Use" "Last Query Statistics Use" "Query Use Count" "Query Statistics Count"といった情報が参照できるようになっています。つまり、当該のインデックス/統計がどのくらい使用されているか、有用なものなのかどうかを判断するための材料が提供されている、ということですね。
Visual Explain の「索引アドバイザー」などで推奨されるインデックスはもうみんなとりあえず作成してしまって、これで後で評価して不要なものは削除する、というようなやり方ができますね。i5 などのそれなりにパワーのあるマシンが必要ではありますが、これ RDB としてはすごい進んでますよ。Ease of Use の DB2/400 らしくていいんじゃないでしょうか。

インフォメーション・センターにも「Determining unnecessary indexes」という項目で載っています。(なぜか日本語にはないんですが)

ちゃんと使われると以下のように更新されます。
ちょっと画面ショットを取り損なってずれてますが、もちろん最終使用日付 ("Query Use Count") や最終統計使用日付 ("Query Statistics Use Count") も更新されています。

アクセスするには、iSeries ナビゲーターの「データベース」 - 「スキーマ」 - 「テーブル」でリストされたテーブルについて、右クリックメニューから以下のように「索引」を選択します。

iSeries Access (PC側) は V5R3 である必要がありますが、アクセスする DB2/400 は V5R2 から OK です。


V5R2 での注意点

V5R2 のサーバーにアクセスする場合は、SI16313 という PTF が必要になります。例のごとくたくさん前提 PTF がありますが、DB グループ PTF #17 が適用されていれば OK です。

ただし、その SI16313 という PTF だけでは以下のようなエラーが出てしまいます (2004/12)。

SE18790 という APAR があり、この問題を回避する手段が載っています。
具体的には、以下のように「SQL スクリプトの実行」ないし STRSQL での 5250 での対話型 SQL 画面で QIWS/GET_INDEXES というストアド・プロシージャーを作成してやることで対応できるということになってます。

と、本当はこれでめでたしめでたしのはずなのですが、これだけだと実は今現在 (2005/01) の日本語環境ではやはりこんなエラーが出ます。

エラーログなどをチェックすればわかりますが、日本語環境で起きるエラーです。(SBCS の英語環境では起きません)
めちゃめちゃ姑息なやり方ですが、iSeries ナビゲータでの接続で指定しているユーザー (= この「索引」を表示させるのに使用されているユーザー) の CCSID を以下のようなコマンドで、テーブルを指定しての「索引」サブメニューを実行する直前に変更してやります。

CHGUSRPRF USRPRF(iナビ接続ユーザー) CCSID(37)

上記エラーなしで、「索引」というタイトルの、こんなかんじの表示がされたところで元に戻してあげれば OK です。

CHGUSRPRF USRPRF(iナビ接続ユーザー) CCSID(1399)

元に戻さないと Visual Explain の結果などが文字化けしたりします。

ちなみにこんなエラーがデータベースサーバーに出ます。
誰か早く修正してくれないかなあ。(ちょっと事情があってコールとかできてないので ...... ) まあ、だいたい日本語環境でだとこんなエラーが出る、ということ自体が問題なんだけど。

付記: 上記エラーは V5R3 では SI19456、V5R2 では SI22581 で修正されているようです。V5R3 でも一年以上かかってるんですねぇ。

[Top Pageに戻る]

Ads by TOK2