Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)


3.15.10 障害調査用SQLの出力

デッドロックやスローダウンなどの障害が発生した場合,発行したSQLが障害の要因となった可能性があります。そこで,発行したSQLをログに出力することによって,障害要因の解析が容易になります。ログに出力されるSQLの情報を障害調査用SQLと呼びます。

〈この項の構成〉

(1) 出力されるタイミング

障害調査用SQLは,次のタイミングで出力されます。

(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から継承した表示対象メソッド

注※1 executeBatch()メソッドを実行した場合は,最後にaddBatch(String sql)メソッド, addBatch()メソッドで加えられたSQLを物理コネクションに保持します。

注※2 addBatch()メソッド,execute()メソッド,executeQuery()メソッド,executeUpdate()メソッドを実行した場合,java.sql.ConnectionのprepareStatementメソッド,prepareCallメソッドの引数で与えられたSQLを物理コネクションに保持します。ただし,SQLのINパラメタプレースホルダー("?")は,置換しないで"?"のまま出力します。

(4) 注意事項

障害調査用SQLの出力機能についての注意事項を説明します。