【问题标题】:What is causing spikes for JDBC calls to Oracle from within Websphere?是什么导致从 Websphere 中对 Oracle 的 JDBC 调用出现峰值?
【发布时间】:2011-10-11 09:26:51
【问题描述】:

我想知道是否有人可以阐明以下问题:

我们已经看到在 AIX 上的 Websphere 6.1 上运行的基于 Spring 2.5.6 的 Web 服务中的 JDBC 调用高峰用于调用 Oracle 64 位 10.2.0.5.0 JDBC 驱动程序版本为 10.2.0.3.0 .

我们使用单线程访问数据库,Web 服务的平均响应时间为 16 毫秒,但我们看到 11 次峰值约为 1 秒或更高(在 5 分钟内约 11,000 次调用中)。 Introscope 告诉我们,这些峰值大约有一半是由“从双重选择 1”(Websphere 连接池用来验证连接)引起的。

在数据库方面,我们已经跟踪了由 Websphere 连接池创建的会话,没有一个不表明数据库内部出现任何峰值。

关于什么可能导致这些峰值的任何想法/建议?

编辑:

我们的连接池设置了 20 个连接,监控显示只使用了一个连接。

EDIT2:

我们已将 Oracle JDBC 驱动程序升级到 10.2.0.5,没有任何区别。

【问题讨论】:

    标签: performance oracle websphere


    【解决方案1】:

    也许这是一个大小不合适的池。

    5 分钟或 300 秒内调用 11,000 次,意味着每秒 37 次调用。每个连接平均 0.016 秒意味着您可以处理每个连接 2,313 个调用。大小为 4-5 的池应该能够处理流量。如果请求最终等待连接可用,我不知道其中一个查询是否会运行一段时间。

    “SELECT 1 FROM DUAL”查询是池将执行的内容,以检查连接是否处于活动状态和可用状态。

    您可以尝试增加池的大小或查看一些其他参数来控制池对连接的作用,以确保它处于活动状态。

    【讨论】:

    • 池大小最大为 20,并且测试驱动应用程序仅使用单个线程并且系统中没有其他负载,所以我会担心池大小是否会导致这些峰值。跨度>
    • 值得一读,因为我在您的原文中没有看到任何提及池大小的内容。 “SELECT 1 FROM DUAL”是测试查询。如果您对该信息的来源有信心,我会在线上安装一个数据包嗅探器并尝试查看网络上发生的情况。
    • 谢谢,我已经用池的大小更新了帖子。 +1 用于数据包嗅探器。
    【解决方案2】:

    这个问题的答案最终与 WebSphere 或 Oracle 无关,而是一个很好的老式网络配置问题,导致 WebSphere 服务器和 Oracle RAC 集群之间的 TCP 重新传输超时。

    为了得出那个诊断结果,我在测试运行前后查看了netstat -p tcp 的输出,发现

    retransmit timeouts
    

    统计数据正在增加。现在可以使用以下命令查看重传超时算法配置:

    $ no -a
    ...
                     rto_high = 64
                   rto_length = 13
                    rto_limit = 7
                      rto_low = 1
    

    这表明重传超时将在 1 到 64 秒之间,并且会越来越多地回退,这解释了为什么我们一直看到 1 秒、2 秒、4 秒、10 秒和 22 秒的峰值,但什么都没有从这些峰值(即没有 6 秒的峰值)。

    一旦网络配置被修复,问题就消失了。

    【讨论】:

      【解决方案3】:

      关闭"Pretest new connections" 有帮助吗?

      【讨论】:

      • 我们已经尝试过了,但它没有。尖峰仍然出现(只是在其他语句中,尖峰似乎是随机的,在一个简单的查询中最多 22 秒)
      猜你喜欢
      • 1970-01-01
      • 2013-11-15
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2019-10-17
      相关资源
      最近更新 更多