java - Oracle DB 网络交互速度非常慢

标签 java oracle performance oracle11g

我的 Oracle DB 网络速度有问题。

首先,问题的本质是什么。我的计算机上有java应用程序,远程服务器上有Oracle DB。它们之间的连接速度约为 2.5MB/s。我在我的java应用程序中执行 一个非常简单的查询,例如“select id, name from table_name”,结果集包含约 60K 行(大小约为 1.5 Mb),并传输到我的应用程序约 80 秒。根据分析器,应用程序大部分时间都花在 oracle.net.Packet.recieve 方法上。

为了进行比较,相同的查询在 SQL Developer 中执行 0.5-0.7 秒,处理 5000 行。推断到 60K 行,我们大约需要 6-8 秒。

我的应用程序的 tcpdump 执行结果显示,数据以大约 200 字节大小的 block 传输。另一方面,对于 SQL Developer tcpdump 显示包大小超过 2000 字节。

Oracle官方文档建议增加SDU和TDU参数,不幸的是我无法更改数据库的配置,所以我尝试在客户端以这样的方式确定它们:

jdbc:oracle:thin:@(DESCRIPTION=(SDU=11280)(TDU=11280)(ADDRESS=(PROTOCOL=tcp)(HOST=<host>)(PORT=1521)(SEND_BUF_SIZE=11784)(RECV_BUF_SIZE=11784))(CONNECT_DATA=(SERVICE_NAME=<db>)))

但这并没有带来任何改变。数据库或ojdbc驱动程序可以忽略这个参数吗?或者也许我走错了路?

最佳答案

事实证明,原因在于获取大小。增加其值可以将执行时间减少约 100 倍。

关于java - Oracle DB 网络交互速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48184993/

相关文章:

C# 是否清除具有值类型的 List<T> 仍然是 O(n) 操作?

android - 使用抽屉导航管理 fragment 生命周期

java - 缺少文件路径

sql - 使用 "select *"时可以格式化列吗?

c# - 使用 C# 的 odp.net 批量复制

mysql - 关系数据库(拥有游戏的每个用户 1 个表)

java - 按钮点击无 react

java - 我需要在每个新输入流上调用 close() 吗?

java - 尝试提高 Sqlite 中批量插入的速度。

performance - Angularjs - 优化 ngrepeat 的观察者以仅观察集合的某些属性