Array Fetch在Delay时间较长的网络中的重要性

    从我的笔记本连到我们公司的测试数据库服务器的网络Delay时间较长, 因为要从中国到美国, 今天在这个环境下测试了Array Fetch的功效, 估许看完了, 你又得去改你的程序了.

    测试软件:

AnySQL
JDBC 10g

    测试语句:

  SET AUTOT TRACE STATISTICS
  SET TIMING ON
  SET FETCHSIZE 1
  SELECT * FROM ALL_OBJECTS WHERE ROWNUM < 100;
  SET FETCHSIZE 2
  SELECT * FROM ALL_OBJECTS WHERE ROWNUM < 100;
  SET FETCHSIZE 10
  SELECT * FROM ALL_OBJECTS WHERE ROWNUM < 100;
  SET FETCHSIZE 20
  SELECT * FROM ALL_OBJECTS WHERE ROWNUM < 100;
  SET FETCHSIZE 50
  SELECT * FROM ALL_OBJECTS WHERE ROWNUM < 100;
  SET FETCHSIZE 100
  SELECT * FROM ALL_OBJECTS WHERE ROWNUM < 100;

    测试结果:

FETCHSIZE Time Consistent Gets Bytes Roundtrips
1 16.858 582 10K 204
2 8.529 516 8323 104
10 1.852 463 6923 24
20 1.021 457 6748 14
50 0.531 451 6642 8
100 0.370 450 6608 6

    可以发现设置较大的FETCHSIZE后, SQL*Net Roundtrips的数量大大减少, 从儿在Delay时间比较长的网络中得以提高性能.

留言 (2)

以为这个是 SQLPlus 的参数,Reference 里找了半天没找到,原来是 JDBC 里设置的,不知道 SQLPlus 的默认值是多少,是不是和 ARRAYSIZE 的道理一样呢?

SQL*Plus的默认值是15, 就是ArraySize了.

发表留言: