我的Oracle DB网络速度有问题。
首先,问题的实质是什么。我电脑上有java应用程序,远程服务器上有Oracle DB。我在我的java应用程序中执行一个非常简单的查询,比如"select id,name from table_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>)))但这并没有带来任何变化。数据库或ojdbc驱动程序可以忽略这些参数吗?或者我走错路了?
发布于 2018-01-11 05:34:56
事实证明,原因在于fetch大小。增加它的值可以将执行时间减少到原来的1/100。
https://stackoverflow.com/questions/48184993
复制相似问题