Java Oracle DB非常慢的网络交互

Java Oracle DB非常慢的网络交互,java,oracle,performance,oracle11g,Java,Oracle,Performance,Oracle11g,我的Oracle DB网络速度有问题 首先,问题的本质是什么。我的计算机上有java应用程序,远程服务器上有Oracle DB。它们之间的连接速度约为2,5MB/s。我在java应用程序中执行 一个非常简单的查询,如“selectid,name fromtable_name”,结果集包含约60K行(大小约为1.5MB),并传输到我的应用程序约80秒。根据分析器,应用程序花费在oracle.net.Packet.recieve方法上的大部分时间 为了进行比较,在SQL Developer中对500

我的Oracle DB网络速度有问题

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

为了进行比较,在SQL Developer中对5000行执行相同的查询0,5-0,7秒。外推到60K行,我们大约有6-8秒

为我的应用程序执行tcpdump的结果表明,数据以大小约为200字节的块进行传输。另一方面,对于SQL开发人员,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>)))
jdbc:oracle:thin:@(DESCRIPTION=(SDU=11280)(TDU=11280)(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)(SEND_BUF_SIZE=11784)(RECV_BUF_SIZE=11784))(CONNECT_DATA=(SERVICE_NAME=))

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

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

我不是Java专家,但您应该看看上面没有提到的
defaultRowPrefetch