4

通常は固定の db ユーザーで実行される Web アプリケーションのトレーサビリティを改善する必要があります。DBA は、データベースのパフォーマンスを低下させているヘビー ユーザーに関する情報にすばやくアクセスできる必要があります。

5 年前、DBMS_APPLICATION_INFO パッケージを使用して、ユーザーとサーバーのログを作成する .NET ORM エンジンを実装しました。次のコードで、接続マネージャーの上にラッパーを使用します。

DBMS_APPLICATION_INFO.SET_MODULE('" + ユーザー + " - " + appServerMachine + "','');

接続がプールから接続を取得するたびに、パッケージが実行されて V$SESSION に情報が記録されます。

ToplinkまたはHibernateを使用して、この問題の解決策を発見または実装した人はいますか? この問題のデフォルトの実装はありますか?

5年前に実装したソリューションをここで見つけましたが、ORMと統合されたより良いソリューションを誰かと知りたいです。

Jboss での DBMS_APPLICATION_INFO の使用

私のアプリケーションはSpringの上にあり、DAOはJPA(hibernateを使用)で実装され、実際にはTomcatで直接実行され、(来年)SAP Netwevare Application Serverに移行する予定です。

ありがとう。

4

3 に答える 3

3

Oracle 10g では、DBMS_SESSION.SET_IDENTIFIERを使用して特定のセッションを一意に識別できます。Oracle は、これを接続プールにフックする JDBC ビルトインも提供しています。アプリケーションに応じて、セッションを一意に識別する独自の手段を提供する必要があります。

DBA は、リソースを大量に消費しているセッションを特定するのに十分な情報を取得します。

私の知る限り、中間層から生成された巨大なテキスト ファイルに感心する DBA はいないでしょう。

于 2009-08-02T08:33:46.627 に答える
0

接続プールでロガー (log4j など) を構成できるはずです。ユーザー ID を取得するには、カスタム アペンダーが必要になる場合があります。

考慮すべき 2 つのポイント:

  1. ビジーなシステムでは、これにより大きなログ ファイルが生成されます。
  2. 頻繁な接続は、DB を劣化させる動作の兆候である必要はありません。
于 2009-05-06T15:00:10.483 に答える
0

実行コストが高いクエリについて知りたい場合は、データベース サーバーに直接アクセスする必要があります。そのための監視ツールがあり、各サーバーに固有です。たとえば、PostgreSQLSELECT * FROM pg_stat_activityでは、管理者として実行して、各接続とその動作、実行時間などを確認します。

本当にコンテナから実行したい/する必要がある場合は、Spring AOP でインターセプターを定義して、何かを実行する前に必要なステートメントを実行することができます。プールを使用しているため、データベース接続は常に同じアプリケーション ユーザーによって使用されるとは限らないことに注意してください。

于 2009-05-06T15:12:22.280 に答える