Colega, algumas obs : 1. COMO, usando qual tool/script/whatever, vc está vendo locks ? Mostre para a gente o script/procedimento, E os valores que vc está obtendo... Isso vai, entre outras coisas, nos mostrar se REALMENTE é lock de dados (resultado de DMLs como o teu INSERT), OU se é lock para acesso à objetos internos, dicionário, whatever... Por exemplo, http://surachartopun.com/2009/11/investigate-row-cache-lock.html mostra um caso aonde o evento era row cache lock decorrente de acesso à sequences com cache baixo... Como vc diz que é RAC, talvez vc esteja vendo locks para acesso aos recursos Globais do cluster, como o Global Cache Lock : pegue no metalink os scripts/tools específicos para consultar isso, como o racdiag.sql, e consultas na GV$LOCK também podem ajudar, como http://www.runningoracle.com/product_info.php?products_id=305 exemplifica... 2. uma vez comprovado que há locks, tenha em mente que eles só interferem na performance SE :
a. vc está tendo ESPERA pelo recurso bloqueado pelo lock (ie, outras sessões querem exatamente nessa hora acessar exatamente esse recurso bloqueado) e b. essa espera é Constante (repetida diversas vezes), relativamente longa E presente em qtdade significativa A simples Contagem de locks absolutamente não quer dizer nada : vc pode ter , por exemplo, ** UM BILHÃO ** de locks de linha resultantes de DMLs, que as outras linhas NÂO SERÃO afetadas, para as outras sessões que não estão tentando alterar/remover essas linhas lockadas a performance VAI SER ABSOLUTAMENTE NÃO-AFETADA : o RDBMS Oracle é TOTALMENTE DIFERENTE de outrso RDBMSs aonde a qtdade de locks interfere em escalabilidade, onde há uma tabela de locks a manter/controlar, isso não existe aqui... 3. SE vc realmente comprovar que está havendo espera por locks, E que elas são significativas dentro do tempo total (consultas na V$SESSION, bem como um tkprof de um trace 10046 level 12 com waits seriam muito úteis nisso), o ponto de estranheza aqui é que vc diz que a operação em curso é um INSERT : veja, INSERTs geram (claro) locks, mas as linhas sendo inseridas são ** NOVAS **, não existiam, então é muito difícil que outras sessões estejam querendo atualizá-las ... Como uma possibilidade, eu checaria por triggers sendo disparadas nesse INSERT acima, talvez... []s Chiappa OBS : se vc encontrar algum subsídio/indicação que aponte para a necessidade de se cachear num valor mais alto as SEQUENCEs envolvidas, recomendo testar especificando NOORDER : cfrme http://www.pythian.com/blog/sequences-in-oracle-10g-rac/ nos diz, se vc especificar ORDERED via de regra isso Implica num lock global para controlar os valores, assegurando que eles serão ordenados não importa qual nó os solicitar... --- Em oracle_br@yahoogrupos.com.br, Jales Jose Moraes escreveu > > Pessoal estou tendo problemas de lock em uma transação que realiza alguns > inserts. Verificamos os índices, as fk's desta tabela e a lógica na aplicação > (na qual é simples) mas os locks ainda continua. > > No entanto, foi levantado a questão aqui de que pode ser problemas nas > sequences, já que o ambiente é RAC e as clausas ORDER e CHACHE tem > significativa > importãncia neste ambiente, já que o CHACHE dos valores são armazenados > independente em cada nó e não há necessidade de sincronismo quando a sequence > está com a clausula NOORDER. > > Bom, este fato pode ser o desencadeador dos locks? > > [As partes desta mensagem que não continham texto foram removidas] >