低速または潜在的に低速な領域の早期警告を取得するために、パフォーマンス モニターとして機能できる NHibernate のインターセプターが必要です。これにより、一定時間以上かかるデータベース操作がイベントを発生させ、(重要なこと) アプリケーションのログへの完全なスタック トレース。
インターセプターは、これに対する良い窓のように見えました。ただし、実験したところ、「SQL から戻るだけ」イベントをキャッチする方法はないようです。
OnPreFlush
OnPostFlush
書き込みが含まれる完全なバッチで動作しますが、読み取りイベントでは呼び出されません。OnPrepareStatement()
測定を開始するのに最適なようですが、停止するには?- 読み取りイベントの場合
OnLoad
、クロックを停止する場所になる可能性がありますが、返されるエンティティごとに 1 回と呼ばれます。 OnPostFlush
書き込みイベントの場合、SQL 後のイベントは表示されません (バッチ全体で動作するものを除き、実際のデータベース呼び出しが発生する前に 、 などが呼び出されるという印象を受けますが、修正していただければ幸いです)OnAfterTransaction
。OnSave
OnFlushDirty
私が知る限り、NHibernate のデータベースとのやり取りでパイプラインの順序が正確に何であるかについてのドキュメントが大幅に不足しているため、そのパイプラインで実際の SQL 実行自体に関連してさまざまなイベントとインターセプター呼び出しが呼び出される場合があります。
これは、バックグラウンドに常駐する必要があり、遅いクエリが検出された場合を除いて、人間の介入をほとんど必要としないものです。また、大規模なサーバー ファームでヘッドレスで実行する必要があるため、NHibernate Profiler などのインタラクティブなツールは出てきました。
見逃したり誤解したりしたことはありますか?