我有一个使用Fluent NHibernate访问oracle数据库的ASP .Net MVC应用程序。我也使用NHibernate Profiler监视由NHibernate生成的查询。我有一个非常简单的查询(从包含4个字符串列的表中选择所有行)。它用于创建CSV格式的报告。我的问题是查询运行时间很长,我希望更深入地了解nhprof显示的持续时间。对于65.000行,即使“仅数据库”持续时间仅显示20毫秒,也需要10-20秒。由于服务器位于同一千兆位局域网上,因此网络延迟不应该在这段时间内发挥很大的作用。我不希望人们能够准确指出瓶颈的位置,但我想知道的是关于如何阅读NHibernate分析器中的持续时间测量的更多细节。什么是包含在“数据库只有”部分,什么在NHibernate Profiler中查询持续时间
被列入“总时间”?总时间还包括填充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位整数。
我绝不是一个数据库专家,所以我会很高兴的,将点我在正确的方向上的所有评论。
你只读,还更新,也取批,取批吗? – Firo
我不是一个将数据插入数据库的人(另一个团队这样做),所以我不确定更新/插入是如何完成的。我认为他们一个接一个地做这件事,因为一张新票入场了。如果那是你的意思? –
关于抓取:我确实获取1000张票据的批量数据,但1000张票据表示650.000行来自V_TICKET_DETAILS视图,因此您可以说它是相当大的批次。如果我将650.000行抓取分成更小的话,性能会更好吗?批? –