Eu tenho o seguinte código no script:
execute immediate 'truncate table tab_a drop storage';
insert /*+APPEND*/ into tab_a
select (...)
Eu estou querendo saber se esta APPEND
dica pode causar alguma mudança de desempenho, já que a tabela está truncada e o armazenamento caiu.
Quaisquer informações, sugestões ou recursos são bem-vindos.
Sem saber muito mais sobre o que você está fazendo, é impossível dizer. No entanto, posso dizer o que APPEND, essencialmente, faz. Ele fará uma inserção de caminho direto na tabela, o que significa simplesmente que gravará os dados diretamente nos blocos de dados e ignorará o cache do buffer. Portanto, geralmente você usará a dica ao carregar um grande conjunto de dados e definitivamente não apenas para alguns registros. Há algumas coisas a considerar, como serialização, reutilização de espaço, etc. Para uma lista muito rápida, dê uma olhada no AskTom https://asktom.oracle.com/pls/apex/f?p=100:11:0 ::NÃO::P11_QUESTION_ID:1211797200346279484 .
É outra opção que você pode considerar dependendo do trabalho que está fazendo.
insert /*+APPEND*/
ignora os caches de buffer e grava diretamente no segmento da tabela. Isso também significa que não deve haver gatilhos na tabela nem restrições exclusivas. E outras condições devem ser atendidas, caso contrário, a dica é silenciosamente ignorada. Verifique o plano executivo de consulta. Se você virLOAD AS SELECT
, a gravação de caminho direto é usada. Se você virLOAD TABLE CONVENTIONAL
, aAPPEND
dica será ignorada.Veja esta resposta do SO sobre restrições:
https://stackoverflow.com/a/10239578/836215