データベース統計 (V5R2 以降) 用ツール

V5R2 からデータベース統計というものがサポートされるようになりました。
データベース統計とはどういうものかは、また調べてまとめてみたいと思っていますが、システムのデフォルトでは自動的に取られるようになっています。通常のデータベースでは統計を更新する、といった命令を実行することで取得するようになっていますので、自動的に統計が必要なカラムを識別し、統計の更新をスケジュールしてくれるのはやはり DB2/400 ならではの便利さと言うことができるでしょう。
システムで自動的にメインテナンスされるため、特別に何かを行う必要はない、というものの、やはりどのテーブルのどのカラムに対して統計が取られたのか知りたい、ということもあるでしょうし、事前にもうあるカラムに対して統計を取るように指定したい、ということもあるでしょう。そういう場合のインターフェイスは iSeries ナビゲーターのみになります。コマンド画面や CL プログラムなどからのインターフェイスは API しかありません。

IBM さん、インターフェイスは iSeries ナビゲーターだけで後は API で頑張れというのはちょっと不親切だと思ったのか、ツールとして Command Line and SQL Interfaces for the QDBST* (Database File Statistics APIs) といったものを用意してくれてます。内容については Redbook「Preparing for and Tuning the V5R2 SQL Query Engine (PDF)/(html)」に紹介があります。サポートされている API をそのままコマンドやデータベースのユーザー定義機能にしたものです。もちろんこのツールそのものについて正式なサポートがあるわけではありません。
このツールは http://www-1.ibm.com/support/docview.wss?uid=nas26a07b20f615d02a986256dcd00422142 でも紹介されています。

これらをどんなものかちょっと見てみましょう。


保管ファイルのダウンロードと転送

dbsttools.savf という保管ファイルが上記ページにありますので、ダウンロードして、iSeries に転送します。
今回は DBSTTOOLS という SAVF をあらかじめ作成しておき、それにたいして FTP で PUT する、という形で転送を行いました。

転送後に DSPTOOLS コマンドで内容を見てみると、こんなかんじになります。
SAVLIB コマンドで保管された DBSTCMD というライブラリーが入っていることがわかりますね。DBFSTC でデータベース統計のことを表しています。それぞれ CNLDBFSTC (データベース統計のキャンセル) / CRTDBFSTC (データベース統計の作成) / DLTDBFSTC (データベース統計の削除) / LSTDBFSTC (データベース統計のリスト) になっています。

DBSTCMD ライブラリーの復元

転送後の SAVF から DBSTCMD というライブラリーを RSTLIB します。

LSTDBFSTC UDF の作成

LSTDBFSTC というユーザー定義関数を作成するためには、それを作成するための SQL 文を発行する必要があります。

SQL 文は保管ファイルをダウンロードした元のページにあると思いますが、念のため再録するとこんなものです。
5250 画面での STRSQL で開始する対話型 SQL 画面よりは、iSeries ナビゲーターの「SQL スクリプトの実行」からの方がやりやすいでしょうね。これをそのままコピーして実行させてしまえばいいわけですから。

CREATE FUNCTION DBSTCMD/LSTDBFSTC
( ASPDEV VARCHAR(10), LIBNAM VARCHAR(10), FILNAM VARCHAR(10), MBRNAM VARCHAR(10) )
RETURNS TABLE ( ASPDEV CHAR(10), LIBNAM CHAR(10), FILNAM CHAR(10), MBRNAM CHAR(10), COLNAM CHAR(10), CRTUSR CHAR(10), STALE CHAR(1), AGEMOD CHAR(10), BLKOPT CHAR(1), CARDIN BIGINT, MFVCNT INTEGER, HSTCNT INTEGER, STCID CHAR(32), STCSIZ BIGINT, STCNAM VARCHAR(128) )
RETURNS NULL ON NULL INPUT
NO FINAL CALL
NO DBINFO
EXTERNAL NAME 'DBSTCMD/LSTDBFSTC(LSTDBFSTC)'
LANGUAGE C++ SCRATCHPAD
PARAMETER STYLE DB2SQL
DISALLOW PARALLEL
NOT FENCED
CARDINALITY 1000;

上の SQL 文を「SQL スクリプトの実行」で実行させるには、「JDBC セットアップ」で「命名規則」を「システム (*SYS)」に変更しておく必要があります。

上のように「JDBC セットアップ」を変更した状態で、以下のように上記 SQL 文を実行させます。
結果として、以下のように「ステートメントは正常に実行されました。」というメッセージが出てくれば OK です。

実行結果の確認

実際に実行できるかどうか見てみましょう。
ユーザー定義関数は、インターフェイスに依存しているわけではないので、今度は 5250 での対話型 SQL 画面から実行させてみましょう。
引数はそれぞれ ASP / ライブラリー / ファイル / メンバー で、ブランクも含めて 10 桁きっちり指定する必要があります。
ASP に * を指定すればカレントの ASP になり、*SYSBAS と指定するとシステム ASP の指定になります。ライブラリーはさすがに *ALL とか指定することはできません。次のファイルを指定している限り、*LIBL / *CURLIB / *USRLIBL と指定することができます。ライブラリーの名前が指定されている場合、ファイルに *ALL を指定することができます。さらにメンバーは *FIRST / *LAST / *ALL といった指定ができます。

こんな結果が返ってくれば OK です。

[Top Pageに戻る]

Ads by TOK2