【问题标题】:Performance Optimization in JavaJava中的性能优化
【发布时间】:2015-08-15 03:33:10
【问题描述】:

在 Java 代码中,我试图从 DB(Oracle) 中获取 3500 行。加载数据大约需要 15 秒。我已经接近将结果存储在缓存中并从中检索。我正在使用简单的 Select 语句并显示单个表中的 8 列(未使用连接)。使用 List 从 DB 中保存数据并将其用作 Datatable 的源。我还从硬件方面考虑过,例如 RAM 容量、存储、网络速度等……它轻松地超过了最低要求。你能帮忙做的更快吗(不应该超过 3 秒)?

【问题讨论】:

  • 请发布查询;这里有很多人可以提供加快速度的建议。
  • 如果 3.5k 行需要 15 秒,则很可能是计划不周/可计划的查询。但是没有更多细节......(查询可能不是独立于连接的 SARGABLE;例如,可能没有合适的索引来覆盖这些条件)
  • 所花费的时间几乎可以肯定完全在数据库或 JDBC 驱动程序中。在 Java 中将 3500 条记录添加到列表中应该需要几毫秒或更短的时间。
  • 请也发布 Java 代码。你应该分批获取——这会有所作为。
  • 您需要首先确定这是一个慢查询(尝试在 sqlplus 中运行自动跟踪),还是 java 处理速度慢。

标签: java oracle performance collections datatable


【解决方案1】:

您是否对表实施了正确的索引?我不想问这个问题,因为这是优化查询表的一种非常基本的方法,并且您提到您已经尝试了几种方法。对我有用的一种解决方法是,如果查询的目的是显示结果,则可以设计代码,使查询在加载更多数据的同时立即显示初始数据。这意味着要实现一个单独的线程来加载和单独的线程来显示。

【讨论】:

  • 15 秒对于“简单查询”来说是 15 秒(而且太长了)。使用线程可能隐藏问题(取决于结果的使用方式),但它不会修复问题。
【解决方案2】:

核心问题很可能是您有以下一项或多项:

  • 架构设计不佳,
  • 设计不佳的查询,
  • 严重过载的数据库,和/或
  • 数据库和您的客户端之间的网络连接严重过载/配置不足。

客户端 (Java) 代码的任何更改都不可能产生显着差异(即增加 5 倍)...除非您在构建列表的方式或瓶颈方面做了一些疯狂的事情是在显示代码而不是检索。


您需要使用一些客户端和服务器端性能工具来确定真正的瓶颈是客户端、服务器还是网络。然后使用这些结果来决定将注意力集中在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2015-09-01
    • 2010-12-17
    • 2013-05-08
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多