Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取在Oracle存储函数中打开的SYS_REFCURSOR时的JDBC预取_Oracle_Jdbc_Prefetch_Sys Refcursor - Fatal编程技术网

获取在Oracle存储函数中打开的SYS_REFCURSOR时的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,仅用于测试目的),但我看不到应用程序执行方式的差异 我还了解到,预取通过减少客户机和数据库服务器之间的往返

我正在阅读一些关于JDBC预取大小的有趣内容,但我找不到一些问题的答案:

  • 我正在开发的Java应用程序旨在从PL/SQL包中的函数打开和返回的游标中获取行。我想知道JDBC驱动程序的pre-fetch默认设置是否真正影响了抓取过程,即在Oracle数据库中解析和打开的SQL语句。我尝试在JBoss配置文件上设置fetch大小,并打印方法setFetchSize()中的值。返回了新值(100,仅用于测试目的),但我看不到应用程序执行方式的差异

  • 我还了解到,预取通过减少客户机和数据库服务器之间的往返次数来提高性能,但是如何测量往返次数,以便验证和量化通过调整预取大小最终可以获得的实际好处

  • 是的,无论游标是由客户端打开的还是从存储的进程中打开的,Oracle JDBC精简驱动程序在从任何游标获取时都将使用配置的预取大小
  • 计算往返次数的最简单方法是查看sqlnet跟踪。通过将
    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