我的Oracle DB网络速度有问题。
首先,问题的本质是什么。我的计算机上有java应用程序,远程服务器上有Oracle DB。它们之间的连接速度约为2.5MB / s。我在我的Java应用程序中执行 一个非常简单的查询,例如"选择id,来自table_name"的名称,结果集包含~60K行(大小约为1.5 Mb)并传输到我的应用程序约80秒。相应于分析器大部分时间应用程序花在oracle.net.Packet.recieve方法上。
为了进行比较,相同的查询在SQL Developer中执行,对于5000行,为0.5-0.7秒。外推到60K行,我们有大约6-8秒。
我的应用程序执行tcpdump的结果显示数据传输的大小约为200字节。另一方面,对于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驱动程序可以忽略此参数吗?或者我可能走错路?
答案 0 :(得分:1)
事实证明,原因在于获取大小。增加其值可以将执行时间减少约100倍。