- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 1 mês atrás por
Ishii.
-
AutorPosts
-
30 de janeiro de 2008 às 5:31 pm #81166
Anônimo
Olá pessoal!
Estou na luta para tentar aumentar o desempenho de uma procedure, estou fazendo algumas modificações e precisaria saber o seguinte:
1 – Para uma tabela que somente sofrerá inserts (nada além de inserts!), qual é a melhor configuração para ela? Em se tratando de PCTFREE, PCTUSED, etc…Esta tabela estará particionada e sofrerá truncates periodicamente em suas partições para diminuir o volume de dados, pois será uma tabela extremamente grande por causa dos inserts.
2 – Caso nem essa melhor configuração da tabela resolva, é possível a procedure gravar todos os dados que seriam inseridos na tabela em memória e depois com um golpe só ser inserido nesta tabela? Tentei usar uma tabela temporária para isso porém não obtive grandes resultados..qual seria o caminho?!
Obrigado desde já pela ajuda de vcs!
[]s,
Rafael
30 de janeiro de 2008 às 8:45 pm #81167Ishii
ParticipanteRafael,
O PCTFREE e o PCTUSED vai te ajudar no sentido de otimizar o espaço utilizado pelos Dados na Tabela e com isso talvez diminuir o espaço em disco no final do insert. Não acho que isso irá te ajudar mesmo na performance do Insert.
Como o histórico do outro post demonstra que na verdade o intervalo dos inserts é menor que o tempo do próprio insert, você pode tentar “paralelizar” os processos, por exemplo se fizer um insert na tabela A de uns 1000 registros e ao mesmo tempo fazer um mesmo insert na mesma tabela A de outros 1000 registros o tempo fica um pouco menor (dependendo da estrutura do Banco) mas isso depende também da sua procedure.
[]s Ishii
30 de janeiro de 2008 às 9:07 pm #81168Anônimo
Olá Ishiii,
Obrigado pela ajuda!
E com relação ao 2º ponto? É possível inserir os dados em memória, tipo numa tabela virtual ( não sei se isso existe no Oracle ) e depois com um select insert inserir os dados num só golpe? Tentei isso com tabela temporária, mas não obtive sucesso.
Com relação ao parelelismo, eu já havia a tempos atrás criado uma outra procedure para tentar agilizar o processo, mas parece q começam a ocorrer concorrências entre os processos e com isso o tempo aumentou.
[]s,
Rafael
30 de janeiro de 2008 às 9:29 pm #81169Ishii
ParticipanteRafael,
Basicamente o insert funciona assim: Após o comando de insert numa tabela apenas este comando fica registrado no REDO e um processo do Oracle (DBWR) se encarrega depois de gravar o dado efetivamente na Tabela, estes processos do Oracle estão sempre em sincronia. Quando estes arquivos do REDO ficam com cerca de 75% “preenchidos” , outro processo “esvazia” o arquivo REDO (CKPT) e armazena diretamente no Banco de Dados (acionando o DBWR). Por isso que anteriormente eu havia mencionado sobre o tamanho dos Log files pois aumentando o tamanho destes arquivos pode ser que o processo fique mais rápido pois o DBWR teria uma “folga” até que o logfile fique “preenchido” até o seu limite.
[]s Ishii
30 de janeiro de 2008 às 9:38 pm #81170Anônimo
Ishii,
Como eu verifico essa informação do tamanho dos log files?
30 de janeiro de 2008 às 10:06 pm #81172Ishii
ParticipanteRafael,
Verifique na view (acho que eh esta) v$logfile o nome dos Arquivos de Log e localize no Servidor Oracle para saber os tamanhos deles. A manutenção deles deve ser feita com cautela !!! Na dúvida utilize um DBA pois este arquivo são importantes e qualquer problema com eles bye Oracle!
[]s Ishii
-
AutorPosts
- Você deve fazer login para responder a este tópico.