3.15.10 障害調査用SQLの出力
デッドロックやスローダウンなどの障害が発生した場合,発行したSQLが障害の要因となった可能性があります。そこで,発行したSQLをログに出力することによって,障害要因の解析が容易になります。ログに出力されるSQLの情報を障害調査用SQLと呼びます。
- 〈この項の構成〉
(1) 出力されるタイミング
障害調査用SQLは,次のタイミングで出力されます。
-
トランザクションタイムアウト発生時
-
J2EEアプリケーションの強制停止実行時
-
メソッドキャンセルコマンド実行時
-
メソッドタイムアウト発生後のメソッドキャンセル実行時
(2) 出力先
障害調査用SQLは,リソースアダプタの稼働ログ,および性能解析トレースに出力されます。
リソースアダプタの稼働ログでは,KDJE50080-Wのメッセージに出力されます。詳細については,マニュアル「アプリケーションサーバ メッセージ(構築/運用/開発用)」の「KDJE50080-W」を参照してください。
性能解析トレースでは,0x8C41のイベントIDに出力されます。詳細については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「8. 性能解析トレースのトレース取得ポイントとPRFトレース取得レベル」を参照してください。
(3) 出力内容
出力対象のコネクションでSQLを発行している場合,物理コネクションがSQLを保持しています。この物理コネクションが保持しているSQLが,障害調査用SQLとして出力されます。
- SQLを保持する物理コネクション
-
障害調査用SQLが出力されるタイミングごとに,SQLを保持している物理コネクションを示します。
-
トランザクションタイムアウト発生時
トランザクションに参加しているコネクションに対応する物理コネクション。
-
J2EEアプリケーションを強制停止した時,メソッドキャンセルコマンド実行時,またはメソッドタイムアウト発生後のメソッドキャンセル実行時
トランザクション処理中の場合,トランザクションに参加しているコネクションに対応する物理コネクション。
トランザクションを使用していない場合,アプリケーション強制停止またはメソッドキャンセルを実行するインスタンスで使用中のコネクションに対応する物理コネクション。なお,クローズしたコネクションは,障害調査用SQL出力の対象外になります。
-
- SQLを保持するAPI
-
ユーザアプリケーションで次のAPIが呼び出されたとき,引数で渡されたSQLを物理コネクションに保持します。保持するSQLは物理コネクションごとに一つです。APIが呼び出されるたびに,最新のSQLが上書きされます。SQLを保持するAPIを次の表に示します。
表3‒93 SQLを保持するAPIの一覧 インタフェース
メソッド
java.sql.Connection
prepareCall(String sql)
prepareCall(String sql, int resultSetType, int resultSetConcurrency)
prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
prepareStatement(String sql)
prepareStatement(String sql, int autoGeneratedKeys)
prepareStatement(String sql, int[] columnIndexes)
prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
prepareStatement(String sql, String[] columnNames)
java.sql.Statement
addBatch(String sql)
execute(String sql)
execute(String sql, int autoGeneratedKeys)
execute(String sql, int[] columnIndexes)
execute(String sql, String[] columnNames)
executeBatch()※1
executeLargeUpdate(String sql)
executeLargeUpdate(String sql, int autoGeneratedKeys)
executeLargeUpdate(String sql, int[] columnIndexes)
executeLargeUpdate(String sql, String[] columnNames)
executeQuery(String sql)
executeUpdate(String sql)
executeUpdate(String sql, int autoGeneratedKeys)
executeUpdate(String sql, int[] columnIndexes)
executeUpdate(String sql, String[] columnNames)
java.sql.PreparedStatement
java.sql.Statementから継承した表示対象メソッド
addBatch()※2
execute()※2
executeQuery()※2
executeUpdate()※2
java.sql.CallableStatement
java.sql.PreparedStatementから継承した表示対象メソッド
(4) 注意事項
障害調査用SQLの出力機能についての注意事項を説明します。
-
DB Connectorを使用している場合,この機能は常に有効になります。DB Connector以外を使用している場合は無効になります。
-
リソースアダプタの稼働ログの障害調査用SQLログに出力されるメッセージが4キロバイトを超えた場合,4キロバイトまでのメッセージだけが出力されます。
-
コネクションシェアリング,コネクションアソシエーションによって共有されたコネクションは,物理コネクションが一つのため,障害調査用SQLログは一つだけ出力されます。