Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #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

      #81167
      Ishii
      Participante

        Rafael,

        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

        #81168
        Anô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

          #81169
          Ishii
          Participante

            Rafael,

            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

            #81170
            Anônimo

              Ishii,

              Como eu verifico essa informação do tamanho dos log files?

              #81172
              Ishii
              Participante

                Rafael,

                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

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.