从我的笔记本连到我们公司的测试数据库服务器的网络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 的道理一样呢?
Posted by Sky | Dec 14, 2006 3:36 AM
SQL*Plus的默认值是15, 就是ArraySize了.
Posted by anysql | Feb 26, 2007 3:45 PM