It seems to me that running 2, 3, ..., n sessions in parallel and drawing the curve of total throughput would tell you whether you have remaining actual headroom in the network bandwidth. You might want to make an actual copy of something as your rowsource so you can get it clean in cache or at least be sure you're not waiting for concurrency issues or block cleanouts or undo references or anything else that might inject elapsed time apart from the thing you are intending to test. "List Price" bandwidth, actual total bandwidth, and currently available headroom can be very different things. Good luck, mwf -----Original Message----- From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of GG Sent: Wednesday, April 11, 2012 2:31 PM To: oracle-l@xxxxxxxxxxxxx Subject: Increasing row retrieving speed via net8 Hi, I'm doing large table processing (row fetching) via Net8 , remote client using JDBC oracle client . Did some testing using snapper and two VMs with Oracle 11.2.0.2 . Got table T with 5M rows avg row length is 104 (its CATS from DBA_SOURCE and doing simple select * from t) . First I used BEQ (local connection :)) protocol as a reference : SQL> @snapper all 5 1 145 Sampling SID 145 with interval 5 seconds, taking 1 snapshots... setting stats to all due to option = all -- Session Snapper v3.52 by Tanel Poder @ E2SN ( http://tech.e2sn.com ) ---------------------------------------------------------------------------------------------------------------------------------------------------- SID, USERNAME , TYPE, STATISTIC , DELTA, HDELTA, HDELTA/SEC, %TIME, GRAPH ---------------------------------------------------------------------------------------------------------------------------------------------------- 145, GG , STAT, user calls , 1319, 1.32k, 263.8, 145, GG , STAT, session logical reads , 23498, 23.5k, 4.7k, 145, GG , STAT, CPU used when call started , 27, 27, 5.4, 145, GG , STAT, CPU used by this session , 27, 27, 5.4, 145, GG , STAT, DB time , 43, 43, 8.6, 145, GG , STAT, user I/O wait time , 2, 2, .4, 145, GG , STAT, non-idle wait time , 15, 15, 3, 145, GG , STAT, non-idle wait count , 10091, 10.09k, 2.02k, 145, GG , STAT, physical read total IO requests , 698, 698, 139.6, 145, GG , STAT, physical read total multi block requests , 687, 687, 137.4, 145, GG , STAT, physical read total bytes , 91127808, 91.13M, 18.23M, 145, GG , STAT, cell physical IO interconnect bytes , 91127808, 91.13M, 18.23M, 145, GG , STAT, consistent gets , 23498, 23.5k, 4.7k, 145, GG , STAT, consistent gets from cache , 11075, 11.08k, 2.22k, 145, GG , STAT, consistent gets - examination , 11075, 11.08k, 2.22k, 145, GG , STAT, consistent gets direct , 12423, 12.42k, 2.48k, 145, GG , STAT, physical reads , 11124, 11.12k, 2.22k, 145, GG , STAT, physical reads direct , 11124, 11.12k, 2.22k, 145, GG , STAT, physical read IO requests , 698, 698, 139.6, 145, GG , STAT, physical read bytes , 91127808, 91.13M, 18.23M, 145, GG , STAT, Number of read IOs issued , 698, 698, 139.6, 145, GG , STAT, no work - consistent read gets , 1348, 1.35k, 269.6, 145, GG , STAT, cleanouts only - consistent read gets , 11073, 11.07k, 2.21k, 145, GG , STAT, immediate (CR) block cleanout applications , 11073, 11.07k, 2.21k, 145, GG , STAT, commit txn count during cleanout , 11073, 11.07k, 2.21k, 145, GG , STAT, cleanout - number of ktugct calls , 11073, 11.07k, 2.21k, 145, GG , STAT, table scan rows gotten , 659500, 659.5k, 131.9k, 145, GG , STAT, table scan blocks gotten , 12421, 12.42k, 2.48k, 145, GG , STAT, buffer is not pinned count , 12366, 12.37k, 2.47k, 145, GG , STAT, bytes sent via SQL*Net to client , 70786316, 70.79M, 14.16M, 145, GG , STAT, bytes received via SQL*Net from client , 26420, 26.42k, 5.28k, 145, GG , STAT, SQL*Net roundtrips to/from client , 1321, 1.32k, 264.2, 145, GG , TIME, DB CPU , 334948, 334.95ms, 66.99ms, 6.7%, |@ | 145, GG , TIME, sql execute elapsed time , 354361, 354.36ms, 70.87ms, 7.1%, |@ | 145, GG , TIME, DB time , 388813, 388.81ms, 77.76ms, 7.8%, |@ | 145, GG , WAIT, direct path read , 20519, 20.52ms, 4.1ms, .4%, | | 145, GG , WAIT, SQL*Net message to client , 7278, 7.28ms, 1.46ms, .1%, | | 145, GG , WAIT, SQL*Net more data to client , 120134, 120.13ms, 24.03ms, 2.4%, |@ | 145, GG , WAIT, SQL*Net message from client , 4023802, 4.02s, 804.76ms, 80.5%, |@@@@@@@@ | -- End of Stats snap 1, end=2012-04-11 09:18:15, seconds=5 --------------------------------------------------------------------------------- Active% | SQL_ID | EVENT | WAIT_CLASS --------------------------------------------------------------------------------- 9% | 89km4qj1thh13 | SQL*Net more data to client | Network 5% | 89km4qj1thh13 | ON CPU | ON CPU -- End of ASH snap 1, end=2012-04-11 09:18:15, seconds=5, samples_taken=43 so if I interpreting this correctly we can fetch like: 131.9k rows per sec which is good Now switching to Net8 with arraysize 15: SQL> @snapper all 5 1 149 Sampling SID 149 with interval 5 seconds, taking 1 snapshots... setting stats to all due to option = all -- Session Snapper v3.52 by Tanel Poder @ E2SN ( http://tech.e2sn.com ) ---------------------------------------------------------------------------------------------------------------------------------------------------- SID, USERNAME , TYPE, STATISTIC , DELTA, HDELTA, HDELTA/SEC, %TIME, GRAPH ---------------------------------------------------------------------------------------------------------------------------------------------------- 149, GG , STAT, user calls , 12036, 12.04k, 2.41k, 149, GG , STAT, session logical reads , 18097, 18.1k, 3.62k, 149, GG , STAT, CPU used when call started , 67, 67, 13.4, 149, GG , STAT, CPU used by this session , 67, 67, 13.4, 149, GG , STAT, DB time , 67, 67, 13.4, 149, GG , STAT, user I/O wait time , 1, 1, .2, 149, GG , STAT, non-idle wait time , 26, 26, 5.2, 149, GG , STAT, non-idle wait count , 12923, 12.92k, 2.58k, 149, GG , STAT, physical read total IO requests , 214, 214, 42.8, 149, GG , STAT, physical read total multi block requests , 211, 211, 42.2, 149, GG , STAT, physical read total bytes , 27951104, 27.95M, 5.59M, 149, GG , STAT, cell physical IO interconnect bytes , 27951104, 27.95M, 5.59M, 149, GG , STAT, consistent gets , 18098, 18.1k, 3.62k, 149, GG , STAT, consistent gets from cache , 2843, 2.84k, 568.6, 149, GG , STAT, consistent gets - examination , 2843, 2.84k, 568.6, 149, GG , STAT, consistent gets direct , 15254, 15.25k, 3.05k, 149, GG , STAT, physical reads , 3428, 3.43k, 685.6, 149, GG , STAT, physical reads direct , 3428, 3.43k, 685.6, 149, GG , STAT, physical read IO requests , 215, 215, 43, 149, GG , STAT, physical read bytes , 28082176, 28.08M, 5.62M, 149, GG , STAT, Number of read IOs issued , 216, 216, 43.2, 149, GG , STAT, no work - consistent read gets , 12387, 12.39k, 2.48k, 149, GG , STAT, cleanouts only - consistent read gets , 2847, 2.85k, 569.4, 149, GG , STAT, immediate (CR) block cleanout applications , 2848, 2.85k, 569.6, 149, GG , STAT, commit txn count during cleanout , 2848, 2.85k, 569.6, 149, GG , STAT, cleanout - number of ktugct calls , 2848, 2.85k, 569.6, 149, GG , STAT, table scan rows gotten , 180270, 180.27k, 36.05k, 149, GG , STAT, table scan blocks gotten , 15225, 15.23k, 3.05k, 149, GG , STAT, buffer is not pinned count , 15147, 15.15k, 3.03k, 149, GG , STAT, bytes sent via SQL*Net to client , 22665295, 22.67M, 4.53M, 149, GG , STAT, bytes received via SQL*Net from client , 238900, 238.9k, 47.78k, 149, GG , STAT, SQL*Net roundtrips to/from client , 11944, 11.94k, 2.39k, 149, GG , TIME, DB CPU , 1566761, 1.57s, 313.35ms, 31.3%, |@@@@ | 149, GG , TIME, sql execute elapsed time , 494193, 494.19ms, 98.84ms, 9.9%, |@ | 149, GG , TIME, DB time , 1566724, 1.57s, 313.34ms, 31.3%, |@@@@ | 149, GG , WAIT, direct path read , 9762, 9.76ms, 1.95ms, .2%, | | 149, GG , WAIT, SQL*Net message to client , 16290, 16.29ms, 3.26ms, .3%, | | 149, GG , WAIT, SQL*Net more data to client , 231066, 231.07ms, 46.21ms, 4.6%, |@ | 149, GG , WAIT, SQL*Net message from client , 3640845, 3.64s, 728.17ms, 72.8%, |@@@@@@@@ | -- End of Stats snap 1, end=2012-04-11 09:36:35, seconds=5 --------------------------------------------------------------------------------- Active% | SQL_ID | EVENT | WAIT_CLASS --------------------------------------------------------------------------------- 7% | 89km4qj1thh13 | ON CPU | ON CPU -- End of ASH snap 1, end=2012-04-11 09:36:35, seconds=5, samples_taken=42 here we can have like 36.05k rows per seconds . Now with fetch size 500 I can do: SQL> @snapper all 5 1 149 Sampling SID 149 with interval 5 seconds, taking 1 snapshots... setting stats to all due to option = all -- Session Snapper v3.52 by Tanel Poder @ E2SN ( http://tech.e2sn.com ) ---------------------------------------------------------------------------------------------------------------------------------------------------- SID, USERNAME , TYPE, STATISTIC , DELTA, HDELTA, HDELTA/SEC, %TIME, GRAPH ---------------------------------------------------------------------------------------------------------------------------------------------------- 149, GG , STAT, user calls , 726, 726, 145.2, 149, GG , STAT, session logical reads , 8640, 8.64k, 1.73k, 149, GG , STAT, CPU used when call started , 183, 183, 36.6, 149, GG , STAT, CPU used by this session , 183, 183, 36.6, 149, GG , STAT, DB time , 174, 174, 34.8, 149, GG , STAT, user I/O wait time , 3, 3, .6, 149, GG , STAT, non-idle wait time , 170, 170, 34, 149, GG , STAT, non-idle wait count , 5925, 5.93k, 1.19k, 149, GG , STAT, physical read total IO requests , 434, 434, 86.8, 149, GG , STAT, physical read total multi block requests , 414, 414, 82.8, 149, GG , STAT, physical read total bytes , 56483840, 56.48M, 11.3M, 149, GG , STAT, cell physical IO interconnect bytes , 56483840, 56.48M, 11.3M, 149, GG , STAT, consistent gets , 8640, 8.64k, 1.73k, 149, GG , STAT, consistent gets from cache , 1006, 1.01k, 201.2, 149, GG , STAT, consistent gets - examination , 1006, 1.01k, 201.2, 149, GG , STAT, consistent gets direct , 7634, 7.63k, 1.53k, 149, GG , STAT, physical reads , 6911, 6.91k, 1.38k, 149, GG , STAT, physical reads direct , 6911, 6.91k, 1.38k, 149, GG , STAT, physical read IO requests , 435, 435, 87, 149, GG , STAT, physical read bytes , 56614912, 56.61M, 11.32M, 149, GG , STAT, Number of read IOs issued , 436, 436, 87.2, 149, GG , STAT, no work - consistent read gets , 6617, 6.62k, 1.32k, 149, GG , STAT, cleanouts only - consistent read gets , 1016, 1.02k, 203.2, 149, GG , STAT, immediate (CR) block cleanout applications , 1016, 1.02k, 203.2, 149, GG , STAT, commit txn count during cleanout , 1016, 1.02k, 203.2, 149, GG , STAT, cleanout - number of ktugct calls , 1016, 1.02k, 203.2, 149, GG , STAT, table scan rows gotten , 363000, 363k, 72.6k, 149, GG , STAT, table scan blocks gotten , 7630, 7.63k, 1.53k, 149, GG , STAT, buffer is not pinned count , 7630, 7.63k, 1.53k, 149, GG , STAT, bytes sent via SQL*Net to client , 41730447, 41.73M, 8.35M, 149, GG , STAT, bytes received via SQL*Net from client , 14500, 14.5k, 2.9k, 149, GG , STAT, SQL*Net roundtrips to/from client , 726, 726, 145.2, 149, GG , TIME, DB CPU , 2018693, 2.02s, 403.74ms, 40.4%, |@@@@ | 149, GG , TIME, sql execute elapsed time , 1853871, 1.85s, 370.77ms, 37.1%, |@@@@ | 149, GG , TIME, DB time , 2018383, 2.02s, 403.68ms, 40.4%, |@@@@ | 149, GG , WAIT, direct path read , 25985, 25.99ms, 5.2ms, .5%, |@ | 149, GG , WAIT, SQL*Net message to client , 2854, 2.85ms, 570.8us, .1%, | | 149, GG , WAIT, SQL*Net more data to client , 1674304, 1.67s, 334.86ms, 33.5%, |@@@@ | 149, GG , WAIT, SQL*Net message from client , 2222786, 2.22s, 444.56ms, 44.5%, |@@@@@ | -- End of Stats snap 1, end=2012-04-11 09:31:06, seconds=5 --------------------------------------------------------------------------------- Active% | SQL_ID | EVENT | WAIT_CLASS --------------------------------------------------------------------------------- 30% | 89km4qj1thh13 | SQL*Net more data to client | Network 3% | 89km4qj1thh13 | ON CPU | ON CPU -- End of ASH snap 1, end=2012-04-11 09:31:06, seconds=5, samples_taken=40 72,6k rows fetched per fetch . Is there anything to do I can go further with Net8 ? I mean SDU in 11.2.0.2 defaults to 8k which seems ok . Considering 100Mbit ethernet speed , I can have like 10Mbytes/per sec so with 1GB table i need ~ 100 sec to transfer that . So feels like not on the edge yet . Any ideas ? Regards GregG -- //www.freelists.org/webpage/oracle-l -- //www.freelists.org/webpage/oracle-l