Em 20 de março de 2012 10:24, Flavio Henrique Araque Gurgel < [email protected]> escreveu:
> > Eu tenho uma plpgslq que requisita um lock ACCESS EXCLUISIVE > > > > lock table tb_processamento_tmp in ACCESS EXCLUSIVE mode; > > Pra quê essa agressividade toda? > Lock pessimista está fora de moda :) > > > Esse tipo de lock pode cancelar o autovacuum? > > Sim. > > > Caso esse lock seja o problema, existe alguma forma de que essa pl seja > > sincronizada. Pois o software que a chama é multi-thread e além disso > esse > > software pode estar rodando em mais de uma maquina, por isso não ha como > > sincronizar na aplicação. > > Fazer um lock numa tabela toda não é algo muito utilizado em > aplicações modernas, ainda mais multi-thread. > É o maior causador de race conditions que eu conheço. Já tive dezenas > de clientes com problemas assim (causando um lock bloqueia dezenas de > outras threads, não é nem o problema de cancelar limpeza). > A recomendação sempre foi ajustar a aplicação e não usar um lock desse > tipo, adotar uma estratégia que permita a concorrência é mais > interessante. > > > Você tem alguma ideia? talvez advisory locks ou algum outro lock. > > Aí precisamos saber qual é a idéia desse lock. Por que você faz esse > lock. Qual a necessidade de sua aplicação fazer isso. O cenario é o seguinte: varios clientes enviam informações a serem processadas e inserem na tabela tb_processamento_tmp. Varios outros clientes consomem os dados dessa tabela. porém o mesmo dado não pode ser consumido por mais de um cliente. Por isso faço o seguinte: bloqueio a tb_processamento_tmp para os demais clientes, retorno um set de registros que não estão em processamento para o cliente que solicitou primeiro, marco esses registros retornados como "em processamento", libero a tabela para a proxima requisicao. Mas isso esta errado. Pois ao dar um lock nessa tabela eu fecho a entrada de registros. O que eu queria bloquear era apenas a requisição para processamento. > []s > Flavio Gurgel > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
