4

Java EE アプリケーションで SQL 実行時間をログに記録する必要があります (それ以上の統計はオプションのボーナスです)。

物事は、より標準的ではない方法でセットアップされます。プールされたJDBC接続を提供するアプリケーションサーバー上のデータソース。

アプリケーションが DB アクセスに使用するもの:

  • 休止状態と
  • 春のJDBCテンプレート

それは上で実行されます:

  • Glassfish OSEおよび
  • Oracle DBS

私が知っていること: P6Spy より優れているものはありますか? ただし、私の観点からすると、質問/回答は古くなっています。

私がこれまでに見つけたもの:

  • 純粋な Hibernate アプローチを使用できます ( hibernate show query execution time )
    • しかし、私の場合は混合DBアクセスのため実行できません
  • カスタム JDBC ドライバーのいくつかを使用できます
    • p6spy - ただし、プロジェクトは数年前に終了したようです (最後のコミットは 3 年前です: http://sourceforge.net/p/p6spy/code/23/tree/trunk/ )
    • log4jdbc - ただし、1 年以上リリースされておらず、ソース アクティビティは約 6 か月間変更されていないようです ( http://code.google.com/p/log4jdbc/source/list )
    • 別の 2: log4jdbc-log4j2 と log4jdbc-remix - 生きているように見えますが、安定性と幅広い使用法についてはわかりません

経験に基づく推薦は大歓迎です。

次のような回答に興味があることに注意してください:私たちはXYZを使用していますが、これは私たちの経験であり、今グーグルで調べて...

4

3 に答える 3

2

完全に正確な SQL 実行時間が必要な場合は、SQL トレースが最適なオプションです。しかし、それを Java EE アプリケーションに入れたいので、ある程度正確な実行時間が明らかに必要です。

以下は、私が提案するものです[コードに実装しました]:

  1. ログイン目的でのみ必要な場合は、適切な Log4j デバッグ メッセージがあり、ログ エントリと共に時刻が出力されます。

  2. 操作の開始時刻と終了時刻を記録するために使用するアプリケーション用の BatchLog テーブルを実装しました。したがって、あなたの場合、クエリの開始時間と終了時間になります。単一のクエリの場合は、おそらくここでトリガーが役立つか、クエリを実行する直前と直後にログ テーブルを更新できます。または、すべてを処理してより正確なデータを提供できるストアド プロシージャの方がさらに優れています。

于 2013-08-17T13:52:01.563 に答える
0

わかりました、あなたの答えに感謝します。最後に、私たちのシナリオに固有のパッチを適用した P6Spy を選択することにしました。

さらに、P6spy が埋めているギャップは最近でも存在すると信じているので、その開発に参加することにしました ( https://github.com/p6spy/p6spy )。問題や機能のリクエストをhttps://github.com/p6spy/p6spy/issuesに報告して、ニーズに合わせてください。

于 2013-08-30T05:26:00.917 に答える