第5章 アプリケーションのコンパイルおよび実行
5.4 アプリケーションのデバッグ
5.4.2 JDBCスナップによる対処
JDBCスナップには、アプリケーション実行時に使用されたJDBC APIごとに、レスポンス性能と入出力データの情報が出 力されます。
レスポンス性能の情報から、API単位で性能コストを算出し、アプリケーションとSymfoware/RDBでの所要時間を分析す ることができます。
また入出力データの情報から、動作異常の原因がどこにあるかを分析することができます。
5.4.2.1 JDBCスナップの採取方法
JDBCスナップの採取は、以下の手順で実行します。
1. 任意のファイルを用意する。
2. 1.で用意したファイル内に実行パラメタ“JDBC_SNAP”を指定する。
3. アプリケーション実行時に、1.で用意したファイル名を指定する。
記述形式
JDBCスナップを出力するには、任意のファイルを用意し、ファイル内に実行パラメタ“JDBC_SNAP”を記述します。
JDBC_SNAP=(出力モード[,スナップファイル名][,出力レベル])
イコール以降を囲むカッコ“()”は、省略可能です。
実行パラメタの右カッコ“)”以降の記述は、コメントとみなします。
例
実行パラメタにコメントを記述した記述例 JDBC_SNAP=(ON,/tmp/symfo.snp,1) JDBCスナップ
行頭にセミコロン“;”のある行は、コメントとみなします。
キーワード、等号“=”、カッコ“()”、コンマ“,”およびセミコロン“;”の前後には、空白またはタブを記述することができます。
複数記述した場合には、最後に指定された記述が有効になります。
JDBC_SNAP=(ON,/tmp/symfo.snp,1)
JDBC_SNAP=(OFF) ←こちらの記述が有効になります
コンマ“,”の前後で改行することができます。ただしその場合、カッコ“()”を省略することはできません。
JDBC_SNAP=(ON,↓
/tmp/symfo.snp,1) ↓
↓:改行
値の並びで途中の値を省略する場合には、コンマだけを記述します。
JDBC_SNAP=(ON,,1) ←スナップファイル名を省略した例
最後に指定した値の後ろのコンマ“,”は省略することができます。
JDBC_SNAP=(ON) ←出力モード以降を省略した例
アプリケーション実行時の指定形式
アプリケーション実行時に、JDBCドライバの環境変数SYMJDBCENVに、実行パラメタを指定したファイル名を絶対パス で指定します。
java -DSYMJDBCENV=/tmp/symjdbc.env
パラメタの意味
パラメタの詳細について、以下に示します。
表5.2 パラメタの詳細
パラメタ名 範囲 省略値 詳細
出力モード (必須)
ON OFF
OFF ON :トレース機能を利用する場合に 指定します。
OFF:トレース機能を利用しない場合 に指定します。
ファイル名 (省略可能)
任意 symfojdbc_プロセスID_
コネクション番号.snp
出力するトレースファイルのファイル名 を指定します。
出力ファイルはプロセス/コネクション ごとに作成されます。同時に複数のプ ロセス/コネクションを使用するアプリ ケーションの場合には複数の出力ファ イルが作成されます。
ファイル名にはパスと拡張子名を指定 でき、プロセスIDとコネクションを識別 する数値(コネクション番号)が自動的 にファイル名の後に付加されます。パ スが省略された場合は実行するアプリ ケーションのカレントディレクトリに出力 します。
例)指定したファイル名:symjdbc.log 実際のファイル
名:symjdbc_2435_2.log 出力レベル
(省略可能)
1~2 2 出力する情報のレベルとして1または2 を指定します。省略した場合は、2が 指定されたとみなします。出力レベル の指定と出力情報の対応について は、“出力情報”を参照してください。
出力情報
出力レベル1:性能分析用
実行されたJDBC API名とそのAPIの開始時刻、終了時刻および開始から終了までの経過時間が出力されます。
出力レベル2:動作結果確認用
出力レベル1の情報に加えて、実行されたJDBC APIの入出力データが出力されます。
表5.3 出力レベルと出力情報
情報 出力レベル:1 出力レベル:2
開始時刻 ○ ○
API名 ○ ○
スレッド名 ○ ○
環境情報およびオプショ
ン情報 - ○
コネクションを識別する数
値(コネクション番号) ○ ○ 文を識別する数値(文番
号) ○ ○
SQL文 ○(注) ○
入力データ - ○
出力データ - ○
エラー情報 ○ ○
終了時刻(経過時間) ○ ○
○:出力あり
-:出力なし
注)PreparedStatementインタフェースまたはCallableStatementインタフェース使用時に出力されます。
出力情報詳細
出力情報の詳細を以下に示します。
表5.4 出力情報と出力形式
出力情報 出力形式
開始時刻 JDBC-API START YYYY/MM/DD HH:MM:SS.sss
API名 API-NAME : インタフェース名API名
スレッド名 API-THREAD : スレッド名 コネクションを識別する
数値(コネクション番号)
API-CONNECTION :数値
文を識別する数値(文番 号)
API-STATEMENT : 数値
環境情報およびオプショ ン情報
url type=(symford/symfold) host=(ホスト名)
port=(ポート番号)
database=(データベース名) schema=(デフォルトスキーマ名) maxconnections=(最大コネクション数) lang=(言語)
ctuneparam=(オプション文字列) codeselect=(OS/UTF-8)
出力情報 出力形式 javaconverter=(コンバータ名) など
SQL文 SQL文は文番号の後ろまたは入力データ域に出力されま
す。
・ 文番号の後ろに出力される場合 例)API-STATEMENT : 3 (SELECT * FROM GENERAL.EMPLOYEE)
・ 入力データ域に出力される場合
出力レベル1の場合の例)1: SELECT * FROM GENERAL.EMPLOYEE
出力レベル2の場合の例)“入力データが文字またはバイナリ の場合”を参照してください
入力データ API-INPUT-VARIABLE 入力データ
・ 入力データが文字またはバイナリの場合 例)1: ...パラメタ番号
0000: 5B CC 58 EB 90 1A ...(1) 富士通 ...(2)
(1):UNICODEの値をバイナリで出力
(2):OSのコードで文字列を出力
・ 入力データが数値の場合 例)1: 100
出力データ API-OUTPUT-VARIABLE 出力データ
出力形式は入力データと同様です。
エラー情報 出力データ域に出力されます。
終了時刻(経過時間) JDBC-API END YYYY/MM/DD HH:MM:SS.sss
(HH:MM:SS.sss) ()内は経過時間
5.4.2.2 JDBCスナップの分析方法
出力されたJDBCスナップの分析方法について説明します。
JDBCスナップには、以下の形式で情報が出力されます。
ここでは出力レベル2を例に説明します。
出力例
JDBC-API START 2007/04/17 09:25:55.693 ...開始時刻 API-NAME : getConnection ...API名 API-THREAD : main
API-INPUT-VARIABLE
url type=symfold ...環境情報およびオプション情報 host=
port=26551 database=COMPANY schema=GENERAL
maxconnections=2147483647 lang=JA
ctuneparam=
:
API-OUTPUT-VARIABLE 1: 2
JDBC-API END 2007/04/17 09:25:55.833 (00:00:00.140) ...終了時刻(経過時間) JDBC-API START 2007/04/17 09:25:55.833
API-NAME : Connection.prepareStatement API-THREAD : main
API-CONNECTION : 2 ...コネクション番号 API-INPUT-VARIABLE ...入力データ 1:
0000: 00 55 00 50 00 44 00 41 00 54 00 45 00 20 00 45 UPDATE E 0010: 00 4D 00 50 00 4C 00 4F 00 59 00 45 00 45 00 20 MPLOYEE 0020: 00 53 00 45 00 54 00 20 00 4E 00 41 00 4D 00 45 SET NAME 0030: 00 3D 00 3F =?
API-OUTPUT-VARIABLE ...出力データ 1: 3
JDBC-API END 2007/04/17 09:25:55.993 (00:00:00.160) JDBC-API START 2007/04/17 09:25:55.993
API-NAME : PreparedStatement.executeUpdate API-THREAD : main
API-CONNECTION : 2
API-STATEMENT : 3 (UPDATE EMPLOYEE SET NAME=?) ...文番号(SQL文) API-INPUT-VARIABLE
API-OUTPUT-VARIABLE
SQLState : S1000 ...エラー情報 SQLCode : 1044
SQLMessage: 必要な入力パラメタが指定されていません JDBC-API END 2007/04/17 09:25:56.043 (00:00:00.050)
APIごとの所要時間の算出方法
JDBCスナップの情報を利用して、JDBCドライバのAPIごとに、所要時間を算出することができます。
[計算式]
APIごとの所要時間=API_ENDの終了時刻の後ろに出力された、経過時間
アプリケーションの所要時間とSymfoware/RDBの所要時間の算出方法
アプリケーションの所要時間とSymfoware/RDBの所要時間は、以下の方法で算出することができます。
1. アプリケーション全体の所要時間を算出するロジックを、アプリケーション内に記述します。
2. 実行パラメタ“JDBC_SNAP”の出力レベルに1を指定して、アプリケーションを実行します。このとき算出された、ア プリケーション全体の所要時間を、aとします。
3. 2.で出力されたJDBCスナップの情報から、APIごとの経過時間の合計を算出します。算出された合計時間を、bと
します。
4. 実行パラメタ“JDBC_SNAP”を指定しないでアプリケーションを実行します。この時のアプリケーション全体の所要 時間をcとします。
[計算式]
アプリケーションの所要時間 =a-b
Symfoware/RDBの所要時間 =c-アプリケーションの所要時間