【问题标题】:JPA - Calling Stored Procedure is slow on first run after server restarted. Why?JPA - 服务器重新启动后首次运行时调用存储过程很慢。为什么?
【发布时间】:2011-08-08 17:43:07
【问题描述】:

我在 Glassfish 上部署了一个应用程序,它使用 JPA (Eclipselink 2.0) 来调用一些存储过程。

我正在做一些性能测试,我发现:每当 glassfish 服务器重新启动并且我尝试调用一些存储过程时,第一次调用总是很慢(我选择调用哪个存储过程并不重要)。但所有后续调用都很快。知道为什么会这样吗?

我检查了 glassfish 监视器,它似乎不是连接问题。连接时间约为 70 毫秒,但存储过程调用需要 1000 多毫秒。所有子序列存储过程调用只需不到 10 毫秒。

【问题讨论】:

    标签: stored-procedures jpa glassfish eclipselink


    【解决方案1】:

    您是第一次访问 JPA 时调用吗?如果是,那么 JPA 在第一次访问时会初始化持久性单元,所以这可能是您看到的成本。

    否则,您可以尝试设置 EclipseLink Performance Profiler 以查看查询时间花费在何处,或使用 JProfiler 等 Java 分析器。

    在最新的 EclipseLink 版本中,有一个持久性单元属性“eclipselink.deploy-on-startup”,它将导致持久性单元在服务器启动时被初始化,而不是在第一次访问时被初始化。

    【讨论】:

    • 谢谢詹姆斯。我试图设置 eclipselink.deploy-on-startup 但这似乎并不影响时间。当持久性单元“初始化”时究竟会发生什么?我应该如何设置探查器才能看到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2016-05-12
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    相关资源
    最近更新 更多