[Pgsql-ayuda] Consulta por error

Alvaro Herrera alvherre@dcc.uchile.cl
Thu, 21 Aug 2003 10:35:33 -0400


On Thu, Aug 21, 2003 at 10:03:33AM -0400, Ricardo Mercado Araneda wrote:

Ricardo,

> Al hacer un insert en una de las tablas de mi modelo me aparece el
> siguiente error: "deadlock detected"
> 
> 	Al revisar la tabla me encuentro que igual se hizo el insert, pero de
> todas maneras estoy preocupado por este tema. Si alguien sabe de que
> trata esto, ruego me orientes. Gracias

Se detecta un deadlock, es decir, dos transacciones están tratando de
obtener un lock que la otra tiene.  Un ejemplo trivial sería
TRANS1				TRANS2
BEGIN;
				BEGIN;
LOCK TABLE a;
				LOCK TABLE b;
LOCK TABLE b;
				LOCK TABLE a;
				-- error: deadlock detected
				ROLLBACK;
-- hacer algo util
COMMIT;

Aqui la transaccion 2 no se completa, pero la 1 sí.  Nota que pasa como
1 segundo desde que ejecutas el "LOCK TABLE a" en trans2 hasta que se
detecta el deadlock (esto es configurable, IIRC).

Ciertamente es algo por lo cual deberias preocuparte :-) porque hay una
transaccion que no se está completando.

Revisa por qué se producen los deadlocks y trata de evitarlos, (por ej.
obteniendo los locks siempre en el mismo orden -- ojo que las
operaciones que involucran llaves foraneas obtienen locks
implicitamente).  Te puede servir echarle una mirada a pg_locks (o
pg_lock, no recuerdo).

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
La web junta la gente porque no importa que clase de mutante sexual seas,
tienes millones de posibles parejas. Pon "buscar gente que tengan sexo con
ciervos incendiánse", y el computador dirá "especifique el tipo de ciervo"
(Jason Alexander)