Bruno,

Crie índices manualmente nas chaves estrangeiras que referenciam essa tabela 
grande que você esta manipulando.

O que acontece é o seguitne, quando você manipula a tabela o Oracle irá 
verificar se existe alguma tabela "filho" que depende dessa tabela alterada 
(isso ocorre a partir da existência de FKs), uma vez que índices não existam 
nas FKs (por padrão só são criados índices nas PKs) o Oracle mantem um lock na 
tabela "filho", se você criar os índices os locks se restringirão as linhas das 
tabelas "filho" que tiveram sua referência sendo manipulada.

Atenciosamente,

 Caio Spadafora,
Database Administrator,
http://0011brothers.blogspot.com/




________________________________
De: Bruno Lorenzini <[email protected]>
Para: Oracle BR <[email protected]>
Enviadas: Quarta-feira, 20 de Janeiro de 2010 12:48:43
Assunto: [oracle_br] Lock estranho

  
Bom dia pessoal,

Estou com uma dúvida. Hoje tenho um processo que faz a carga de uma tabela
gigantesca. Tentei carregar esses dados e o processo ficou extremamente
lento.

Eu apenas desabilito triggers de tabela destino, e uso um bulk-insert..

Detectei que no momento do insert ocorriam locks de outras tabelas que não
estavam sendo carregadas.

Percebi que as tabelas que deram locks eram tabelas que possuíam FK para
essa tabela ou a tabela possui FK pra essas tabelas (todas estavam
inter-relacionadas) .

Decidi então desligar as FK’s e rodar em modo de debug até o momento do
lock. Não ocorreu.

Isso é possível? Alguém sabe explicar porque o Oracle fez isso? Porque isso
atrapalhou a performance do meu processo?

Obrigado pela ajuda pessoal.

Bruno Lorenzini

[As partes desta mensagem que não continham texto foram removidas]


 


      
____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados..yahoo.com

[As partes desta mensagem que não continham texto foram removidas]

Responder a