Connor, I'm a little hard-pressed to imagine why any redo at all should be generated for GTT, but it can't be too hard to test. If I wasn't so lazy I'd also fire up Log Miner and look at what is being generated... ******************** First in 10.1.0.3 *********************** SQL> create global temporary table xtemp 2 ( 3 col1 number, 4 col2 number 5 ); Table created. SQL> set autotrace on SQL> insert into xtemp values (1,1); 1 row created. Execution Plan ---------------------------------------------------------- 0 INSERT STATEMENT Optimizer=ALL_ROWS (Cost=1 Card=1 Bytes=100) Statistics ---------------------------------------------------------- 4 recursive calls 8 db block gets 2 consistent gets 1 physical reads 284 redo size 632 bytes sent via SQL*Net to client 539 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / 1 row created. Statistics ---------------------------------------------------------- 184 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 140 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 184 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 140 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 184 redo size Seems to average about 180 bytes per insert of two NUMBER columns. OK, what if the GTT was a regular table? SQL> create table ytemp as select * from xtemp where 1 = 2; Table created. SQL> insert into ytemp values (1, 1); 1 row created. Execution Plan ---------------------------------------------------------- 0 INSERT STATEMENT Optimizer=ALL_ROWS (Cost=1 Card=1 Bytes=100) Statistics ---------------------------------------------------------- 17 recursive calls 8 db block gets 5 consistent gets 1 physical reads 0 redo size 637 bytes sent via SQL*Net to client 540 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / 1 row created. Statistics ---------------------------------------------------------- 356 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 296 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 296 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 296 redo size So, in 10g at least, each insert generates about 50-60% of the redo on permanent tables. ******************** Next in 9.2.0.1 *********************** SQL> create global temporary table xtemp 2 ( 3 col1 number, 4 col2 number 5 ); Table created. SQL> set autotrace on SQL> insert into xtemp values (1,1); 1 row created. Execution Plan ---------------------------------------------------------- 0 INSERT STATEMENT Optimizer=CHOOSE Statistics ---------------------------------------------------------- 2 recursive calls 10 db block gets 2 consistent gets 2 physical reads 244 redo size 618 bytes sent via SQL*Net to client 530 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / 1 row created. Statistics ---------------------------------------------------------- 128 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 128 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 128 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 128 redo size SQL> create table ytemp as select * from xtemp where 1 = 2; Table created. SQL> insert into ytemp values (1,1); 1 row created. Execution Plan ---------------------------------------------------------- 0 INSERT STATEMENT Optimizer=CHOOSE Statistics ---------------------------------------------------------- 2 recursive calls 7 db block gets 2 consistent gets 0 physical reads 588 redo size 622 bytes sent via SQL*Net to client 530 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / 1 row created. Statistics ---------------------------------------------------------- 240 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 240 redo size SQL> / 1 row created. Statistics ---------------------------------------------------------- 240 redo size So, on 9i, as with 10g, the amount of redo generated for GTT is about 50-60% that generated for "permanent" tables. The same general ratio holds true for UPDATEs and DELETEs, as well. Now, that doesn't seem too excessive, unless you're surprised by the fact that DML against GTT creates *any* redo at all (as I was!)... Someday, when I'm not feeling too lazy (and tired -- it's late!), I'll fire up Log Miner and find out what's being logged from GTTs... Thanks! -Tim on 5/18/05 6:46 PM, Connor McDonald at mcdonald.connor@xxxxxxxxx wrote: > (If my red-wine diluted memory serves....) GTT dml resulted the block > being "redo-ed" instead of the rows > > Connor > > On 5/18/05, Post, Ethan <Ethan.Post@xxxxxx> wrote: >> Yes that was one of the issues, wasn't there something else with >> temporary tables generating a bunch of REDO? >> =20 >> -----Original Message----- > > > --=20 > Connor McDonald > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= > =3D=3D > email: connor_mcdonald@xxxxxxxxx > web: http://www.oracledba.co.uk > > "Semper in excremento, sole profundum qui variat" > -- > //www.freelists.org/webpage/oracle-l > -- //www.freelists.org/webpage/oracle-l