我有一个使用 Fluent NHibernate 访问 oracle 数据库的 ASP .Net MVC 应用程序。我还使用 NHibernate Profiler 来监控 NHibernate 生成的查询。我有一个非常简单的查询(从具有 4 个字符串列的表中选择所有行)。它用于创建 CSV 格式的报告。我的问题是查询需要很长时间才能运行,我想更深入地了解 nhprof 显示的持续时间。对于 65.000 行,它需要 10-20 秒,即使“仅数据库”持续时间仅显示 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 profiler 生成的查询是这样的:
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 位整数上。
我绝不是数据库专家,所以我很高兴看到所有能够为我指明正确方向的评论。