获取在Oracle存储函数中打开的SYS_REFCURSOR时的JDBC预取
我正在阅读一些关于JDBC预取大小的有趣内容,但我找不到一些问题的答案:获取在Oracle存储函数中打开的SYS_REFCURSOR时的JDBC预取,oracle,jdbc,prefetch,sys-refcursor,Oracle,Jdbc,Prefetch,Sys Refcursor,我正在阅读一些关于JDBC预取大小的有趣内容,但我找不到一些问题的答案: 我正在开发的Java应用程序旨在从PL/SQL包中的函数打开和返回的游标中获取行。我想知道JDBC驱动程序的pre-fetch默认设置是否真正影响了抓取过程,即在Oracle数据库中解析和打开的SQL语句。我尝试在JBoss配置文件上设置fetch大小,并打印方法setFetchSize()中的值。返回了新值(100,仅用于测试目的),但我看不到应用程序执行方式的差异 我还了解到,预取通过减少客户机和数据库服务器之间的往返
trace\u level\u server=16
添加到sqlnet.ora文件中,可以在服务器端打开sqlnet跟踪(同样在服务器上,因为JDBC thin不使用sqlnet.ora)。然后,每个前台进程将在跟踪文件中转储网络流量。然后,您可以查看与客户端交换的网络数据包,并计算往返次数。默认情况下,驱动程序获取10乘10的行。但是,由于您已经将fetch大小增加到100,因此在一次往返中,它应该可以获取到该数量的行李>
请注意,除非您的客户机远离您的服务器(相当长的ping时间),否则往返的成本不会很高,并且除非您正在获取非常多的行(10000s),否则在增加获取大小时,您不会看到性能上的太大差异。默认值10通常适用于大多数OLTP应用程序。在您的客户机很远的地方,您也可以考虑增加SDU大小(SqliNET包的最大大小)。默认值为8k,但在12.2中可以将其增加到2MB