Re: lock timeout

From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: Lista Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: lock timeout
Date: 2005-01-14 15:29:10
Message-ID: 41E7E546.2000206@soft-com.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera escribió:
> On Thu, Jan 13, 2005 at 09:44:33PM +0100, Oswaldo Hernández wrote:
>
> Hola,
>
>
>>No encuentro ningun punto ni variable para configurar el valor de
>>timeout para los locks.
>
>
> No hay.
>
>
>>El problema es que cuando ejecuto un bloqueo sobre una tabla, o un
>>registro, y desde otro proceso intento realizar una actualización sobre
>>el registro bloqueado, este se queda esperando indefinidamente y nunca
>>da el error de 'registro bloqueado'.
>
>
> Realmente necesitas bloquear el registro en cuestion? Echale una mirada
> a esta presentacion:
>
> http://conferences.oreillynet.com/cs/os2002/view/e_sess/2681
>

No habia visto esa presentacion, pero si habia repasado la documentacion
que he econtrado sobre este tema, y realmente el sistema de
transacciones MVCC con las opciones de 'read commited' y 'serializable'
es algo verdaderamente fantástico y que resuelve la mayoria de los casos.

Pero a mi entender no los resuelve todos.

El caso que me preocupa en este momento, es que hasta ahora he
utilizado, de forma satisfactoria, el sistema de bloqueos como
indicadores para control de procesos.

Es decir, cuando existen dos procesos que no deben ejecutarse
simultáneamente uno de ellos realiza un bloqueo de un registro
determinado, cuando el otro proceso intenta ejecutarse intenta bloquear
el mismo registro, si esto provoca un error le sirve como indicador que
el otro se esta ejecutando, y el no puede.

En muchos casos no es problema que un proceso quede esperando para
realizar el bloqueo hasta que el actual finalice y desbloquee (se
formaria una especia de cola de procesos). Pero existen ciertos casos en
los que no deseo esa espera, sino que simplemente salte un error.

Podria evitar el uso de bloqueos y grabar valores true/false en los
registros para que estos valores indicaran la actividad de los procesos
(utilizando transaccion serializable para asegurarme que no se activan
simultáneamente dos o mas procesos). Pero tendria el siguiente
inconveniente:
La grabacion de este indicador tendria que realizarse fuera de la
transaccion del proceso para que sea visible por los otros, y si por
cualquier motivo se cortara la comunicacion con el cliente mientras el
proceso esta activo, la transaccion del proceso abortaria, pero el
indicador quedaria activo hasta que se cancelara de forma manual.

Disculpad por todo este rollo, saludos.

El presente correo ha sido analizado por la plataforma Soluciones ADSL
y se encuentra libre de virus.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-01-14 16:53:47 Re: lock timeout
Previous Message Leonel Nunez 2005-01-14 15:27:37 Re: Para quien me pueda ayudar...