René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

set arraysize [SQL*Plus]

set arraysize n
Arraysize specifies how many rows SQL*Plus will fetch in a call. The number n can be between 1 and 5000.
This will be demonstrated here. A table with 20 rows is created:
create table t_20_rows
  as select object_name, object_id
from
  all_objects
where
  rownum < 21;
Now, make SQL*Plus display statistics about SQL statements:
set autotrace on
Setting the arraysize to five:
set arraysize 5 
Selecting all rows from the table:
select * from t_20_rows;
Here's what autotrace reports:
          0  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
       1566  bytes sent via SQL*Net to client
        532  bytes received via SQL*Net from client
          5  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         20  rows processed
We're particularyly interested in SQL*Net roundtrips to/from client. It records 5. This makes sense: there are 20 rows in the table, we get 5 (as specified with arraysize) at a time, so there are 4 roundtrips to get the rows and a 5th roundtrip that initiates the query.
Now, let's see what happens if we decrease the arraysize down to 3:
set arraysize 3 
We'd expect 8 roundtrips: 7 to get the row plus one to initiate the query:
          0  recursive calls
          0  db block gets
         10  consistent gets
          0  physical reads
          0  redo size
       1930  bytes sent via SQL*Net to client
        565  bytes received via SQL*Net from client
          8  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         20  rows processed

Storing settings across sessions

Settings (such as arraysize) can be stored accross sessions with the glogin.sql and/or login.sql file.