IBM技術ブログ Vol.3 - Db2 for IBM i (VS Code拡張機能)を今日から使い始めよう 後編 -
はじめに
前回の記事では、Db2 for IBM i の基本的なSQL実行環境や使い方についてご紹介しました。今回はその続編として、開発効率をさらに高めるための機能にフォーカスします。特に、SQLの実行プランの確認や、インタラクティブな実行環境、エラーの自動記録といった機能は、日々の開発や運用において非常に役立ちます。
さて、以下の2点は前回の記事でまとめた内容です。今回は、Visual ExplainとSELFについて深掘りしてまいります。
Visual Explain(実行プランの可視化)
SQL文の実行プランの内部情報を表示し、パフォーマンス分析に活用可能。SELF(SQL Error Logging Facility)との連携
IBM i 側で有効化されたSELF機能により、SQLエラーのログを QSYS2.SQL_ERROR_LOG から確認可能。トラブルシュートに有効。
Visual Explain:SQLの実行プランを"見える化"
Visual Explainとは?
Visual Explainは、Db2 for i のSQLクエリがどのように実行されるかを視覚的に分析できる機能です。クエリの実行プランを表示することで、パフォーマンスのボトルネックやインデックスの利用状況などを直感的に把握できます。
Db2 for iをアクセスして利用している開発者にとっては、SQLの実行結果だけでなく、その裏側で何が起きているかを理解することが、より効率的なクエリ設計につながります。
Visual explainの機能は、IBM i Access Client Solutions(ACS)とVS Code(Db2 for IBM i )にて利用することができます。
Visual Explain 2つの利用方法
IBM i Access Client Solutions(ACS)
ACSの「Run SQL Scripts」からVisual Explainを起動することで、SQLの実行プランをグラフィカルに表示できます。
特に以下の点が視覚的にわかりやすく、パフォーマンス分析に役立ちます:
- インデックスの使用状況
- テーブルアクセスの種類(フルスキャン/インデックスアクセス)
- 各ステップのコストと行数の推定
- 実行プランのツリー構造と色分け表示
Db2 for IBM i(VS Code)
VS CodeでSQLを記述・実行した後、そのSQLを実行または、実行無しCodeの画面上で解析情報を確認することができます。VS CodeでSQLを記述・実行した後、そのSQLに対する解析情報を画面上でテキスト形式にて確認をすることができます。
グラフィカル表示はできませんが、以下のような情報を手軽に取得できます:
- 実行時間
- ステートメントの種類や最適化オプション
実行環境
- ※VS Code上での解析情報は、Db2 for iが生成する実行プランの一部をテキストベースで表示するものであり、ACSのような視覚的なツリー表示は行われません。
実際にトライ
Explain機能を試すには、Run SQL statementから、Run and explain statement(実行あり解析)または、Explain without running(実行無し解析)を選択します。

実行結果は以下のような画面が表示されます。

さらに、Advised Indexes and Statisticsを押下すると作成すべきIndexと統計情報の更新をアドバイスする情報を表示できます。

Generate SQL for Advised Indexesを押下し、推奨INDEXの自動生成も可能です。

SELF(SQL Error Logging Facility):エラーをウォッチ
SELF(SQL Error Logging Facility)とは?
SELFは、Db2 for i におけるSQL実行時のエラーや警告を自動的にログに記録する機能です。これにより、アプリケーション側でエラー処理を実装していなくても、SQLCODEに基づいてエラー情報をシステムが自動的に捕捉し、問題の特定やトラブルシューティングのための分析ができるようになります。
SELFの構成要素
-
SQL_ERROR_LOG ビュー
- このビューは、SELFによって記録されたSQLエラーや警告の詳細情報を格納する中心的なデータです。
- 記録される情報には以下をご参照ください。
ibm.com/docs/en/i/7.5.0?topic=services-sql-error-log-view よく確認する項目は以下です。
LOGGED_SQLCODE 発生したSQLエラーコード LOGGED_SQLSTATE SQL状態コード STATEMENT_TEXT SQLSTATEが発生したSQL文 LOGGED_TIME エラー発生日時 USER_NAME 実行ユーザー JOB_NAME 実行ジョブ名 PROGRAM_NAME 実行プログラム名 PROGRAM_LIBRARY プログラムのライブラリ STATEMENT_OPERATION_DETAIL SQL文の種類(SELECT, INSERTなど) NUMBER_OCCURRENCES 同じエラーの発生回数
- 参照方法は、SELECT 文を使って内容を確認できます。
- 開発者や運用担当者が、エラーの原因分析や傾向把握に活用できます。
-
SELFCODES グローバル変数
- SELFがどの種類のSQLコードをログに記録するかを制御するための設定項目です。
- 設定可能な値の例:
*ERROR すべてのエラーを記録 *WARN すべての警告を記録 *ALL エラーと警告の両方を記録 100,204,-501 特定のSQLCODEのみを記録
- この変数を適切に設定することで、ログの粒度や対象範囲を柔軟に調整できます。
- ログ対象とするSQLCODE(エラーや警告番号)を指定します。ジョブ単位、もしくはシステム全体で設定可能です。
VALIDATE_SELF 関数
- SELFの設定値が正しいかどうかを事前に確認するための補助機能です。
- VALIDATE_SELF 関数は、SYSIBMADM.SELFCODES に設定する文字列の構文チェックを行います。
- 例えば、'*ALL' や '100,204,-501' といった値が、SELFの仕様に沿った正しい形式かどうかを検証できます。
- この関数を使うことで、設定ミスによるログ記録の失敗を未然に防ぐことができます。
実際にトライ
SELFで監視するログレベル・SQLコードの設定
Db2 for i への接続ジョブ(QZDASOINITジョブ)を表示して右クリック→Set Logging Level for SELF を選択します。


今回はSELFCODESを*ALLに設定しました。
※VS Codeのユーザー設定 → 拡張機能 から Db2 for IBM i を検索、SQL Error Logging Facility(SELF) の項目があり、設定の確認・変更が可能です。

VALIDATE_SELF 関数で妥当性チェック
SELFCODESを*ALL にしているので間違いようがありませんが、チェックをしてみます。あえて誤ったSQLCODE('-551, -204, -501, +')を入力すると、not validになりました。

*ALLや正しいSQLCODEを設定すると、妥当性が問題ないことがわかります。


SELFのエラーを確認する
以下の誤ったSQLを実行してみましょう。(LOG_TIMESTAMPというカラム名は存在しません)
SELECT *
FROM QSYS2.SQL_ERROR_LOG
ORDER BY LOG_TIMESTAMP DESC
FETCH FIRST 5 ROWS ONLY;

SELFビューで内容をSQL_ERROR_LOGに書き込まれた内容を確認することができます。

もちろん、SQL_ERROR_LOGをSelectで直接参照してもOKです。
以下のSQL文は情報が多い項目を除いてSELECT文で確認しています。
SELECT
LOGGED_SQLCODE,
LOGGED_SQLSTATE,
NUMBER_OCCURRENCES,
STATEMENT_TEXT,
STATEMENT_OPERATION,
STATEMENT_OPERATION_DETAIL,
REASON_CODE,
PROGRAM_LIBRARY,
PROGRAM_NAME,
PROGRAM_TYPE,
MODULE_NAME,
LOGGED_TIME,
JOB_NAME,
THREAD_ID,
ADOPTED_USER_NAME,
USER_NAME,
SYSTEM_USER_NAME,
CLIENT_ACCTNG,
CLIENT_APPLNAME
FROM QSYS2.SQL_ERROR_LOG
WHERE USER_NAME = 'KOINUMA';

終わりに
本記事では、VS Code上でDb2 for IBM iを利用する際に活用可能なVisual ExplainおよびSELFログ機能についてご紹介しました。
繰り返しになりますが、これらの機能は、SQLの実行状況やエラーの原因を可視化することで、開発者がより効率的かつ確実に保守・改修を行える環境を提供します。
今後も、IBM iの開発環境における利便性向上と、開発者支援のための機能強化が進められていく予定です。
ぜひ、これらの機能を実際の開発業務に取り入れていただき、さらなる活用方法や改善のご意見をお寄せいただければ幸いです。
執筆者紹介
![]() |
肥沼 沙織(こいぬま さおり) 日本アイ・ビー・エム株式会社 2015年:ユーザー系企業のIT子会社に入社 2017年:IBM i 保守開発+RPA開発に従事 2023年:日本アイ・ビー・エム入社 Powerテクニカルセールスとして従事 2024年 ~ 2025年:RPG Code Assitant@日本プロジェクト参加、IBM i リスキリングカレッジ運営 Qiita:シュッとシリーズ https://qiita.com/KOINULIB |
あわせて読みたい記事

IBM技術ブログ Vol.1 - IBM i 7.6最新機能でMFA(多要素認証)が追加 -

IBM技術ブログ Vol.2 - Db2 for IBM i (VS Code拡張機能)を今日から使い始めよう 前編 -

IBM技術ブログ Vol.3 - Db2 for IBM i (VS Code拡張機能)を今日から使い始めよう 後編 -
