JDBCスナップには、アプリケーション実行時に使用されたJDBC APIごとに、レスポンス性能と入出力データの情報が出力されます。
レスポンス性能の情報から、API単位で性能コストを算出し、アプリケーションとSymfoware/RDBでの所要時間を分析することができます。
また入出力データの情報から、動作異常の原因がどこにあるかを分析することができます。
JDBCスナップの採取は、以下の手順で実行します。
任意のファイルを用意する。
1.で用意したファイル内に実行パラメタ“JDBC_SNAP”を指定する。
アプリケーション実行時に、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
パラメタの意味
パラメタの詳細について、以下に示します。
パラメタ名 | 範囲 | 省略値 | 詳細 |
---|---|---|---|
出力モード (必須) | ON OFF | OFF | ON :トレース機能を利用する場合に指定します。 OFF:トレース機能を利用しない場合に指定します。 |
ファイル名 (省略可能) | 任意 | symfojdbc_プロセスID_コネクション番号.snp | 出力するトレースファイルのファイル名を指定します。 出力ファイルはプロセス/コネクションごとに作成されます。同時に複数のプロセス/コネクションを使用するアプリケーションの場合には複数の出力ファイルが作成されます。 ファイル名にはパスと拡張子名を指定でき、プロセスIDとコネクションを識別する数値(コネクション番号)が自動的にファイル名の後に付加されます。パスが省略された場合は実行するアプリケーションのカレントディレクトリに出力します。 例)指定したファイル名:symjdbc.log 実際のファイル名:symjdbc_2435_2.log |
出力レベル (省略可能) | 1~2 | 2 | 出力する情報のレベルとして1または2を指定します。省略した場合は、2が指定されたとみなします。出力レベルの指定と出力情報の対応については、“出力情報”を参照してください。 |
出力情報
実行されたJDBC API名とそのAPIの開始時刻、終了時刻および開始から終了までの経過時間が出力されます。
出力レベル1の情報に加えて、実行されたJDBC APIの入出力データが出力されます。
情報 | 出力レベル:1 | 出力レベル:2 |
---|---|---|
開始時刻 | ○ | ○ |
API名 | ○ | ○ |
スレッド名 | ○ | ○ |
環境情報およびオプション情報 | - | ○ |
コネクションを識別する数値(コネクション番号) | ○ | ○ |
文を識別する数値(文番号) | ○ | ○ |
SQL文 | ○(注) | ○ |
入力データ | - | ○ |
出力データ | - | ○ |
エラー情報 | ○ | ○ |
終了時刻(経過時間) | ○ | ○ |
○:出力あり
-:出力なし
注)PreparedStatementインタフェースまたはCallableStatementインタフェース使用時に出力されます。
出力情報の詳細を以下に示します。
出力情報 | 出力形式 |
---|---|
開始時刻 | JDBC-API START YYYY/MM/DD HH:MM:SS.sss |
API名 | API-NAME : インタフェース名API名 |
スレッド名 | API-THREAD : スレッド名 |
コネクションを識別する数値(コネクション番号) | API-CONNECTION :数値 |
文を識別する数値(文番号) | API-STATEMENT : 数値 |
環境情報およびオプション情報 | url type=(symford/symfold/symforda) 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) ()内は経過時間 |
出力された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=2050 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の所要時間は、以下の方法で算出することができます。
アプリケーション全体の所要時間を算出するロジックを、アプリケーション内に記述します。
実行パラメタ“JDBC_SNAP”の出力レベルに1を指定して、アプリケーションを実行します。このとき算出された、アプリケーション全体の所要時間を、aとします。
2.で出力されたJDBCスナップの情報から、APIごとの経過時間の合計を算出します。算出された合計時間を、bとします。
実行パラメタ“JDBC_SNAP”を指定しないでアプリケーションを実行します。この時のアプリケーション全体の所要時間をcとします。
アプリケーションの所要時間 =a-b Symfoware/RDBの所要時間 =c-アプリケーションの所要時間