If the database is running on
The following example is run against a database running in
The next example performs the same test, but this time on a database running in
To allow the
NOARCHIVELOG
mode, using just the APPEND
hint will reduce redo generation. In reality, you will rarely run OLTP databases in NOARCHIVELOG
mode, so what happens in ARCHIVELOG
mode? In ARCHIVELOG
mode, using the APPEND
hint will not reduce redo generation unless the table is set to NOLOGGING
. The examples below step through this process to show it in action.The following example is run against a database running in
NOARCHIVELOG
mode. The redo generation is displayed in bold.As suggested, with the database running onSQL> CREATE TABLE t1 AS SELECT * FROM all_objects WHERE 1=2; Table created. SQL> SET AUTOTRACE ON STATISTICS SQL> INSERT INTO t1 SELECT * FROM all_objects; 72512 rows created. Statistics ---------------------------------------------------------- 634 recursive calls 9946 db block gets 50116 consistent gets 2 physical reads 8464520 redo size 830 bytes sent via SQL*Net to client 796 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 1508 sorts (memory) 0 sorts (disk) 72512 rows processed SQL> TRUNCATE TABLE t1; Table truncated. SQL> INSERT /*+ APPEND */ INTO t1 SELECT * FROM all_objects; 72512 rows created. Statistics ---------------------------------------------------------- 369 recursive calls 1689 db block gets 48194 consistent gets 2 physical reads 46048 redo size 822 bytes sent via SQL*Net to client 810 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 1500 sorts (memory) 0 sorts (disk) 72512 rows processed SQL> COMMIT; Commit complete. SQL>
NOARCHIVELOG
mode, the addition of the APPEND
hint did reduce the amount of redo generated.The next example performs the same test, but this time on a database running in
ARCHIVELOG
mode.Notice how the addition of theSQL> CREATE TABLE t1 AS SELECT * FROM all_objects WHERE 1=2; Table created. SQL> SET AUTOTRACE ON STATISTICS SQL> INSERT INTO t1 SELECT * FROM all_objects; 88773 rows created. Statistics ---------------------------------------------------------- 613 recursive calls 11792 db block gets 116808 consistent gets 2 physical reads 10222352 redo size 370 bytes sent via SQL*Net to client 552 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 3142 sorts (memory) 0 sorts (disk) 88773 rows processed SQL> TRUNCATE TABLE t1; Table truncated. SQL> INSERT /*+ APPEND */ INTO t1 SELECT * FROM all_objects; 88773 rows created. Statistics ---------------------------------------------------------- 307 recursive calls 1573 db block gets 114486 consistent gets 0 physical reads 10222864 redo size 366 bytes sent via SQL*Net to client 566 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 3138 sorts (memory) 0 sorts (disk) 88773 rows processed SQL> COMMIT; Commit complete. SQL>
APPEND
hint no longer has an impact on the amount of redo generated.To allow the
APPEND
hint to have an impact on redo generation again, we must set the table to NOLOGGING
.SQL> ALTER TABLE t1 NOLOGGING; Table altered. SQL> TRUNCATE TABLE t1; Table truncated. SQL> SET AUTOTRACE ON STATISTICS SQL> INSERT INTO t1 SELECT * FROM all_objects; 88773 rows created. Statistics ---------------------------------------------------------- 506 recursive calls 11790 db block gets 116652 consistent gets 0 physical reads 10222328 redo size 373 bytes sent via SQL*Net to client 552 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 3139 sorts (memory) 0 sorts (disk) 88773 rows processed SQL> TRUNCATE TABLE t1; Table truncated. SQL> INSERT /*+ APPEND */ INTO t1 SELECT * FROM all_objects; 88773 rows created. Statistics ---------------------------------------------------------- 307 recursive calls 1573 db block gets 114486 consistent gets 0 physical reads 25968 redo size 366 bytes sent via SQL*Net to client 566 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 3138 sorts (memory) 0 sorts (disk) 88773 rows processed SQL> COMMIT; Commit complete. SQL> DROP TABLE t1 PURGE; Table dropped. SQL>
Nice Job Dear.Keep it Up.....
ReplyDelete