|
transacciones wait lock timeout
estimado Casimiro Notevi
Me explico:
1.- Caja1, Caja2, Caja3 son clientes que tiene el mismo software.
2.- Sus correspondientes pFIbTransaction estan configuradas como sigue:
]
write
nowait
rec_version
read_committed
]
Esto quiere decir que si Caja1 vende una lata de kikocola y en ese mismo instante Caja2 tambien vende una lata de kikocola se produce una concurrencia de 2 transacciones al mismo registro.
Por lo tanto la transaccion que llego segunda por tener un ]"nowait"]no espera y lanza un error lock_conflict indicando al usuario esta situacion para despues hacer un rollback.
Ante esta situacion el usuario debe rehacer la transaccion.
Imaginate en un supermercado!!!
]DE LA OTRA FORMA]
1.- Caja1, Caja2, Caja3 son clientes que tiene el mismo software.
2.- Sus correspondientes pFIbTransaction estan configuradas como sigue:
]
write
wait
LOCK TIMEOUT 5
rec_version
read_committed
]
Esto quiere decir que si Caja1 vende una lata de kikocola y en ese mismo instante Caja2 tambien vende una lata de kikocola se produce una concurrencia de 2 transacciones al mismo registro.
En este caso la transaccion que llego segunda por tener un ]"wait"]espera a que la primera transaccion termine y despues procede a ejecutarse.
Pero este ]"wait" tiene un peligro potencial, pues mientras no termine la transaccion anterior no se ejecutara la siguiente pudiendo pues transcurrir una cantidad de tiempo muy grande(se desconecto el cliente , etc.).
Entonces aqui viene la gran solucion. Firebird 2 acompaña el parametro
"wait" del parametro "Lock Timeout X".
Esto significa que si la primera transaccion no se termina en 5 segundos, se producira un error isc_lock_timeout lo cual se maneja programaticamente.
En ningun caso este parametro quiere decir que la segunda transaccion debe esperar 5 segundos. De hecho puedo colocarle un tiempo de 1 segundo si quiero.
Y con respecto a lo ultimo. Si revisas las consultas del foro, la mayoria de ellas tienen que ver con consultas relacionadas con stocks, tablas maestro detalle, updates etc.
|