Fluent NHibernate を使用して Oracle データベースにアクセスする ASP .Net MVC アプリケーションがあります。また、NHibernate によって生成されたクエリを監視するために、NHibernate Profiler も使用しています。非常に単純なクエリが 1 つあります (4 つの文字列列を持つテーブルからすべての行を選択する)。レポートをCSV形式で作成する場合に使用します。私の問題は、クエリの実行に非常に時間がかかることです。nhprof によって表示される期間についてもう少し詳しく知りたいと思います。65.000 行の場合、「データベースのみ」の期間は 20 ミリ秒程度しか表示されませんが、10 ~ 20 秒かかります。サーバーは同じギガビット LAN 上にあるため、ネットワークの遅延はこの時間に大きく影響することはありません。ボトルネックがどこにあるかを正確に特定できるとは思っていません。
「データベースのみ」の部分には何が含まれ、「合計時間」には何が含まれますか? 合計時間には、C# オブジェクトを設定した後に行われた処理も含まれているので、この時間は実際には http 要求全体のためのものですか? これについてもっと知ることで、いくつかの要因を排除できるようになることを願っています.
NHibernate マッピング クラスは次のようになります。
Table("V_TICKET_DETAILS");
CompositeId()
.KeyProperty(x => x.TicketId, "TICKET_ID")
.KeyProperty(x => x.Key, "COLUMN_NAME")
.KeyProperty(x => x.Parent, "PARENT_NAME");
Map(x => x.Value, "COLUMN_VALUE");
nh プロファイラーによって生成されるクエリは次のようになります。
SELECT this_.TICKET_ID as TICKET1_35_0_,
this_.COLUMN_NAME as COLUMN2_35_0_,
this_.PARENT_NAME as PARENT3_35_0_,
this_.COLUMN_VALUE as COLUMN4_35_0_
FROM V_TICKET_DETAILS this_
ビューは非常に単純で、2 桁の整数で 2 つのテーブルを結合するだけです。
私は決してデータベースの専門家ではないので、正しい方向性を示すすべてのコメントをお待ちしております。