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

Responder a