2016-04-22 14 views
0

すべてHQLまたはいいえHQLはログに記録されています。誰かがHibernateの設定/パラメータを知っていますが、これは異なるクエリのためのHQLロギングの優先順位付け/分類を可能にしますか?HQLロギングカテゴリ/選択的なHibernate HQLロギング?

たとえば、各クエリでカテゴリまたは "クエリタイプ"マーカーを設定し、各クエリタイプの../WARN/INFO/DEBUG/ ..ログレベルを調整できることが理想です。

私は、おそらくのためのリスナーを登録し、どこかに自分の設定に応じて、リスナーにロギングを引き起こす可能性が含まれているイベントで、

  • org.hibernate.event.spi.EventTypeのようなものがあります見ることができます。

  • org.hibernate.Interceptorは、セッション内の特定のイベントのために呼び出されるメソッドを定義します。これは、同様のものでオーバーライドできます。

しかし、実行中のクエリに対応するエントリポイントはすぐに見つかりませんでした。 @NamedQueryに注釈フィールドを設定するのが簡単な方法ですが、そこには何も明白ではありません。

+0

いいえ方法はありません。なぜあなたはそれをしたいのですが、それが有用なユースケースを想像することはほとんどありません。 –

+0

ユース・ケースは、大量のデータを処理するクライアント・システムのログ/パフォーマンス分析です。私たちが満足しているクエリもあれば、ユーザー設定に従って動的に生成される可能性があるため、事前に知ることができない場合もあります。したがって、休止状態レイヤを呼び出すときの選択性が役立ちます。ロギングは良好ですが、以前は過剰なロギングについての苦情がありました。これはログのノイズを削減する1つの方法です。 – nsandersen

答えて

0

これらのクエリを運用システムに記録すると、パフォーマンスが低下します。

高価なクエリを特定する代わりに、DBの分析ツール(Oracle OEMなど)を使用することをお勧めします。また、多くのデータベースのシステムテーブルを直接照会して、実行時間の長いクエリや頻繁に実行されるクエリなどを識別することもできます。

あなたの意志へのハイバネートクエリを曲げることは、非常に難しいことがあります。頻繁にフェッチされたデータをキャッシュするか、データベースでインデックスとパーティショニングを実行して、クエリパフォーマンスの問題を解決します。

+0

ロギングにはいくつかのCPUサイクルが必要です(上記のようにロギングを制御できる別の理由!)が、この場合は大部分の時間がデータベースの更新とクエリに費やされます。通常はAWRレポートが役立ちますが、往々にして多くの関係を持つ忙しいDBAの関与を必要としないため、顧客から平易なログを取得する方が簡単です。ログはまた統計的なビューよりもむしろ特定のものの時間を提供し、有用でもあり得る。 – nsandersen