Pessoal, tava analisando um problema num cliente, e percebi que o processo mais demorado era um insert executado várias vezes numa tabela. A lógica era mais ou menos essa abaixo, se já existia um dado na tabela, era feito um update de valores.
insert into tabela values ... exception when dup_val_on_index update tabela set ... No trace gerado pelo cliente, ele tentou executar 56000 inserts, foram gravados somente 56 linhas, o resto foi tudo pro update. O problema que pra executar os 56000 inserts demorou 300 segundos, os updates foram bem rápidos. Fazendo os testes, o problema era a primary key, eu desabilitei ela, criei um indice normal, e fiz a verificacao se o registro existe, faco update, senão, insert. Desse modo ficou bem rápido também. O que eu gostaria de saber é a explicação pra isso, sei que, com a primary key, é necessário atualizar o arquivo de indice a cada insert. Mas no cliente só gravou 56 inserts, então conclui que o problema em alguma verificação que a primary key força o oracle a fazer. Alguém sabe o que o Oracle realiza nos inserts, e o porque da demora? Outra coisa, tem como fazer o insert ficar mais rápido ou uma solução melhor do que desabilitiar a pk? Se alguém tiver idéia melhor ajuda, porque vou ter que alterar um monte de procedures. :-) Obrigado