Leandro,

> Sei que não é a resposta esperada, mas a verdade a vezes doí, deadlock é
> problema de lógica da aplicação.

Essa regra tem exceção.

> Você pode ter milhares de transações em
> paralelo e não ter deadlock,

Teu sistema e tua modelagem precisam ser radicalmente simplórios para isso 
acontecer.

> Para resolver problemas deadlock não é necessário
> sacrificar paralelismo

Depende do número de tabelas envolvidas nas suas transações e no número de
transações diferentes que você tem na sua aplicação. É fácil evitar 
deadlocks se
todas as telas do seu sistema sempre gravam nas mesmas tabelas, porém este 
caso
é trivial demais para servir para o mundo real.

> e sim rever a lógica de aquisição de locks da aplicação.

Como já disse, posso até rever a lógica e colocar alguns LOCKs estratégicos 
para garantir
a inexistência de deadlocks, porém isso afetará sim, e muito, a capacidade 
de paralelismo
do servidor. E afetará de forma tão significativa que compensa ter um 
trabalho *enorme*
cuidando dos erros e problemas gerados pelos raros casos em que deadlocks 
ocorrem
atualmente.

> Uma dica simples é adquirir os locks nos objetos sempre na mesma ordem.

Esta solução simplória é excelente como regra geral, porém insuficiente para
todos os casos práticos.

> Para defender o postgresql posso ter informar que por exemplo o bancos
> de dados bam-bam do mercado (Oracle) não tem comando similar a este e
> isto não é um problema.

Problemas com deadlocks sempre podem ser mitigados superdimensionando o 
servidor, como
é comum em instalações Oracle. Isto nem de longe quer dizer que o Oracle 
também não se
beneficiaria com isso, nem que ele está livre das mazelas dos deadlocks, 
especialmente para as
almas penadas que pensavam que podiam usar os bitmap indexes dele sem ter 
problemas com
deadlocks, por mais bem feita e planejada que seja sua aplicação. Esta 
"decisão técnica" não é
a primeira péssima idéia do Oracle nem de longe a única, e a última coisa 
que o Postgres
precisa fazer como produto é imitar os erros dos seus concorrentes, 
especialmente quando
existem benefícios concretos como desempenho e simplicidade de projeto.

Para quem quer ser melhor que seus concorrentes, fica a solicitação de 
inclusão dessa
funcionalidade.

Mozart Hasse 


_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a