调用org.hibernate.Query#list
的方法存在性能问题。方法调用的持续时间随着时间的推移而变化:它通常持续大约一秒钟,但有些天,可能是半天,大约需要20秒。
如何解决此问题?如何确定此问题的原因?
分析此问题的更多元素:
答案 0 :(得分:0)
使用Hibernate查询显然随机缓慢的一个可能原因是刷新会话。如果同一事务中的某些语句(插入,更新,删除)未刷新,则Query的list方法可能会执行autoflush(取决于当前的刷新模式)。如果是这种情况,性能问题可能甚至不会由调用list()的查询引起。
答案 1 :(得分:0)
似乎问题在于MS SQL Server和程序计划的更新:在DBCC FREEPROCCACHE之后,DBCC DROPCLEANBUFFERS的查询和方法时间是一致的。
该问题的解决方案可能是升级MS SQL Server:升级到MS SQL Server 2008 R2 SP2导致问题不再出现。
查询的持续时间与方法的持续时间之间的差异似乎是与返回的对象相关的指数因子:大部分时间花费在结果集的套接字读取上。