IBM i サービスの下記2つはほぼ同じデータを取得できますが、処理速度が体感上結構変わります。
QSYS2.User_Info
QSYS2.User_Info_Basic
この2つのSQLモニターを取得して処理時間を比較してみたいと思います。
Db2 for i SQLパフォーマンス・モニター(DBモニター)の取得手順
①ACS, Navigator for i, IBM i OSコマンドでデータ取得を開始
ACSの場合
ACS -> データベース -> SQL Performance Center -> パフォーマンス・モニター の画面から、、
新規 -> パフォーマンス・モニター を選択します。次へボタンを押します。
DBモニター名(任意)とデータの保管先ライブラリー(任意)を指定します。次へボタンを押します。
この画面で、取得するSQLの範囲を限定できます。SQLパフォーマンス・モニターはSQL実行の明細を取得するのでシステム負荷が高い処理、と言えます。できる限り無用なデータ収集はさけるべきでしょう。
今回はACS スクリプト実行画面からQZDASOINITジョブ経由でIBM i サービスを実行します。ユーザー・プロファイルも自分のものなので、その二つに絞るように選択しました。
次へボタンを押すと確認画面が出るので終了ボタンを押します。(画面省略)
Navigator for i の場合
執筆時点ではNavigator for i の旧版(2001ポート)のみ実行できるようです。(ということはIBM i 7.4以前でのみ実行可能)
データーベース → すべてのタスク → ヘルスおよびパフォーマンス → 新規SQLパフォーマンス・モニター を開きます。
※以降の指定方法はACSと同様なので省略します。
IBM i OSコマンドから
STRDBMON
コマンドで実行します。
こちらも今回は詳細省略します。
②ACSからSQLパフォーマンス・モニターの状態を確認する。
パフォーマンス・モニターの画面を見ると、上で指定した、USER_INFO_DBMON01 が開始されています。
以上でSQLのデータ取得準備が完了します。
SQLを実行しデータを取得する。
それではACSスクリプト実行から IBM i サービス2つを実行します。
実行するIBM i サービスは以下の2つです。
SELECT * FROM QSYS2.USER_INFO
WHERE SIGN_ON_ATTEMPTS_NOT_VALID > 0 ;
SELECT * FROM QSYS2.USER_INFO_BASIC
WHERE SIGN_ON_ATTEMPTS_NOT_VALID > 0 ;
※2つのSQLステートメントを実行するので1つ1つをセミコロン ; で区切ります。
実行時の画面がこちら。
SQLパフォーマンス・モニターを停止する。
SQLの実行が完了したら、SQLパフォーマンス・モニターを停止します。
ACSから対象のモニターを右クリックして 終了 を選択します。
以上でデータ収集が完了します。
SQLパフォーマンス・モニター・データの分析
分析もACSから開始できます。SQLパフォーマンスモニターの画面で、モニター名を右クリックして、ステートメントの表示を選択します。
次の画面が表示されます。左側のウィンドウで表示するSQLを絞り込めます。ここでは2つしか実行していないのでフィルター無しで全件表示(2件表示)しています。
ここでまず処理時間が分かります。(この時間はIBM i 内部=サーバー処理時間です)
1行目:USER_INFO は処理時間 約2.79秒
2行目: USER_INFO_BASIC は処理時間 約0.01秒
でした。かなり異なりますね。
私の感覚が相当アバウトだという事も改めて分かりました(^^;
ちょっと深掘りしてみる Visual Explain で図示してみる
今回の目的は達成されていますが、もうちょっと見てみましょう。
1行目を右クリックして Visual Explainを選択してみます。
すると、1行目のSQL(USER_INFOビュー)の実行明細が図示されます。
左側のアイコン1つ1つがSQLの実行段階明細を表示しており、それぞれの処理時間や処理レコード件数、どのようなアクセス方法・処理方法か等の明細が右側に表示されます。
上記は最終ステップの処理明細を図示していますが、左側で別なアイコンをクリックすると、クリックした処理についての明細が表示されます。
もうひとつ、2行目もVisual Explainすると、、、
2つ上の1行目の図示と比較するだけでずいぶん処理ステップが少ないこともわかりますね。
Visual Explainの使い方などは探すと出てくると思います。そのうちやってみたいと思います。
db2batch でIBM i Db2 for i のSQLを測定できるか?
すみません、本日時間切れです・・また別稿で検証してみます。(guri guriさんすみません・・)