【问题标题】:Select on one row table takes seconds在一个行表上选择需要几秒钟
【发布时间】:2014-07-10 11:26:07
【问题描述】:

我的 Web 应用程序的性能非常低,处理微不足道的 HTTP 请求需要几十秒。跟踪应用程序代码我发现大部分时间都花在执行第一个数据库查询上,即使它像在单行单列表上的 SELECT 一样简单。这发生在每个 HTTP 请求上,与执行的查询无关。在第一次病态 DB 交互之后,其余查询顺利进行。

我在 Oracle DB 之上使用 Hibernate(使用 jdbc)。

这不是连接池的问题,因为我成功使用了Hibernate-c3p0,它似乎也与Oracle本身无关,因为如果直接在DB上执行,所有查询都会立即返回。

此外,Hibernate SessionFactory 仅正确创建一次,在应用程序启动时,并发性根本不是问题,因为测试是使用单个用户完成的。

最后,我的 DB IP 地址在我的应用服务器 /etc/hosts 中得到了正确解析,因此甚至可以丢弃与 DNS 相关的问题(我使用两个不同的虚拟机,DB 和 APP 服务器)。

我不知道该寻找什么,有什么帮助吗?

【问题讨论】:

    标签: performance oracle hibernate


    【解决方案1】:

    这听起来像是您的会话工厂对象在第一次查询时被启动。通常我会尝试在应用程序启动时初始化会话工厂,以避免在发出第一个查询时出现这种情况,因为通常用户可以看到这种减速。在应用程序启动时预先执行此操作时,您将避免这种情况。

    【讨论】:

    • 非常感谢您,即使起初我对您的回答持怀疑态度,但您说得对。问题是我正在追查一些性能问题,每次我进行一些更改时,我都会重新编译我的源代码。这样SessionFactory 就被调用了,我的时间统计数据被夸大了。如果我只是在不重新编译的情况下再重复一次测试,我会解决的。谢谢你的时间。 (也感谢 Serrano 帮助我格式化)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多