As Global Temporary Tables foram
introduzidas no Oracle 8i, com o objetivo de reduzir o overhead dos dados temporários dentro do banco de dados.
Uma Global Temporary Table armazena seus
dados em uma temporary tablespace e
estes dados são mantidos durante a transação ou durante toda a sessão (ON COMMIT DELETE ROWS ou ON COMMIT PRESERVE ROWS).
Instruções
DML em Global Temporary Tables não
geram REDO, devido ao fato destes dados estarem armazenados em uma temporary tablespace, mas geram UNDO e
isto sim implicará na geração de REDO.
No Oracle
Database 12c, existe um novo parâmetro chamado TEMP_UNDO_ENABLED que pode ser alterado a nível de banco de dados
ou de sessão. Se este parâmetro for habilitado, o UNDO gerado por transações
DML em objetos temporários (ex. global
temporary tables) será guardado em uma temporary
tablespace.
Este novo
recurso, além de diminuir a geração de REDO, também permite o uso de instruções
DML em global temporary tables em um physical standby database com Active Data Guard option.
Não
precisamos nos preocupar com os dados de REDO gravados em uma temporary tablespace, pois eles não são
necessários para um recovery.
Table created.
SQL> set autotrace on statistics
SQL> insert into tabela_testes select level, level from dual connect by level <= 10000;
10000 rows created.
Statistics
----------------------------------------------------------
119 recursive calls
859 db block gets
320 consistent gets
2 physical reads
62344 redo size
856 bytes sent via SQL*Net to client
882 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
17 sorts (memory)
0 sorts (disk)
10000 rows processed
SQL> alter session set temp_undo_enabled=true;
Session altered.
SQL> set autotrace on statistics
10000 rows created.
Statistics
----------------------------------------------------------
119 recursive calls
859 db block gets
320 consistent gets
2 physical reads
62344 redo size
856 bytes sent via SQL*Net to client
882 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
17 sorts (memory)
0 sorts (disk)
10000 rows processed
SQL> alter session set temp_undo_enabled=true;
Session altered.
SQL> set autotrace on statistics
SQL> insert into tabela_testes select level, level from dual connect by level <= 10000;
10000 rows created.
Statistics
----------------------------------------------------------
4 recursive calls
865 db block gets
154 consistent gets
1 physical reads
272 redo size
853 bytes sent via SQL*Net to client
881 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
10000 rows processed
10000 rows created.
Statistics
----------------------------------------------------------
4 recursive calls
865 db block gets
154 consistent gets
1 physical reads
272 redo size
853 bytes sent via SQL*Net to client
881 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
10000 rows processed
Segue abaixo
algumas V$ views que podemos consultar para obter informações e estatísticas a
respeito de temporary undo data:
- V$TEMPUNDOSTAT
- DBA_HIST_UNDOSTAT
- V$UNDOSTAT
Referências:
Abraço
Alex Zaballa
0 comentários:
Postar um comentário