update tipos registro from example detectar datos column bloqueos bloquear sql-server locking transactions pessimistic

sql-server - tipos - update sql server column



Bloqueo pesimista en T-SQL (3)

Ninguno. Casi nunca desea mantener abierta una transacción mientras su usuario ingresa datos. Si tiene que implementar un bloqueo pesimista como este, las personas generalmente lo hacen implementando su propia funcionalidad.

Considera las ramificaciones completas de lo que estás haciendo. Una vez trabajé en un sistema que implementó el bloqueo de esta manera. A menudo te topas con toneladas de bloqueos añejos, y tus usuarios se confunden y se enojan muy rápido cuando les pones esto en sus manos. La solución para nosotros en nuestro caso fue eliminar por completo esta funcionalidad de bloqueo.

Si selecciono una fila para actualizar en MS SQL Server, y quiero que esté bloqueada hasta que actualice o cancele, ¿qué opción es mejor ?:

1) Use una sugerencia de consulta como UPDLOCK 2) Use REPEATABLE READ nivel de aislamiento para la transacción 3) cualquier otra opción.

Gracias, Chak.


Si está esperando otro recurso, como un usuario final, siga los consejos de Dave Markle y no lo haga.

De lo contrario, pruebe el siguiente código T-SQL:

BEGIN TRAN SELECT * FROM authors AU WITH (HOLDLOCK, ROWLOCK) WHERE AU.au_id = ''274-80-9391'' /* Do all your stuff here while the row is locked */ COMMIT TRAN

La sugerencia de HOLDLOCK educadamente le pide a SQL Server que mantenga el bloqueo hasta que usted confirme la transacción. La sugerencia de ROWLOCK educadamente le pide a SQL Server que bloquee solo esta fila en lugar de emitir un bloqueo de página o tabla.

Tenga en cuenta que si se afectan muchas filas, SQL Server tomará la iniciativa y se escalará a bloqueos de página, o tendrá todo un ejército de bloqueos de fila llenando la memoria de su servidor y empantanando el procesamiento.


Solo tenga en cuenta que a pesar de usar ROWLOCK SQL Server puede optar por tomar un bloqueo de página completa si lo considera necesario.