2010-08-12 13 views

Respuesta

39

Hazte la siguiente pregunta: ¿Sería malo si alguien INSERTARA una nueva fila en tus datos mientras se ejecuta tu transacción? ¿Esto interferiría con sus resultados de una manera inaceptable? Si es así, use el nivel SERIALIZABLE.

De MSDN regarding SET TRANSACTION ISOLATION LEVEL:

SERIALIZABLE

coloca un bloqueo rango en el conjunto de datos, prevenir que otros usuarios actualicen o insertar filas en el conjunto de datos hasta que se complete la transacción. Este es el más restrictivo de los cuatro niveles de aislamiento. Debido a que la concurrencia es menor, use esta opción solo cuando sea necesario. Esta opción tiene el mismo efecto que establecer HOLDLOCK en todas las tablas en todas las declaraciones SELECT en una transacción.

Por lo que su transacción mantiene todos los bloqueos a lo largo de su vida útil, incluso los que normalmente se descartan después de su uso. Esto hace que parezca que todas las transacciones se ejecutan de a una por vez, de ahí el nombre SERIALIZABLE. Nota de Wikipedia regarding isolation levels:

SERIALIZABLE nivel

Este aislamiento se especifica que todas las transacciones se realizan de una manera completamente aislada ; es decir, como si todas las transacciones del sistema tuvieran ejecutadas en serie, una después de la otras. El DBMS puede ejecutar dos o más transacciones al mismo tiempo solo si se puede mantener la ilusión de la ejecución serial .

+0

Una buena referencia relacionada: (serializable vs aislamiento de instantáneas) http://blogs.msdn.com/b/craigfr/archive/2007/05/16/serializable-vs-snapshot-isolation-level.aspx –

+0

Aquí está el enlace actualizado a ['SET TRANSACTION ISOLATION LEVEL' de MSDN] (https://msdn.microsoft.com/en-us/library/ms173763.aspx) –

+0

@AlexYursha Gracias, actualicé la publicación. –

3

Probar contabilidad. Las transacciones en las cuentas son intrínsecamente serializables si desea tener valores de cuenta adecuados Y adherirse a cosas como los límites de crédito.

Cuestiones relacionadas