Niveles de aislamiento del motor de base de datos

Las transacciones especifican un nivel de aislamiento que define el grado en que se debe aislar una transacción de las modificaciones de recursos o datos realizadas por otras transacciones. Los niveles de aislamiento se describen en cuanto a los efectos secundarios de la simultaneidad que se permiten, como las lecturas desfasadas o ficticias.

Control de los niveles de aislamiento de transacción:

  • Controla si se realizan bloqueos cuando se leen los datos y qué tipos de bloqueos se solicitan.
  • Duración de los bloqueos de lectura.
  • Si una operación de lectura que hace referencia a filas modificadas por otra transacción:
    • Se bloquea hasta que se libera el bloqueo exclusivo de la fila.
    • Recupera la versión confirmada de la fila que existía en el momento en el que empezó la instrucción o la transacción.
    • Lee la modificación de los datos no confirmados.

La selección de un nivel de aislamiento de transacción no afecta a los bloqueos adquiridos para proteger la modificación de datos. Siempre se obtiene un bloqueo exclusivo en los datos modificados de una transacción, bloqueo que se mantiene hasta que se completa la transacción, independientemente del nivel de aislamiento seleccionado para la misma. En el caso de las operaciones de lectura, los niveles de aislamiento de transacción definen básicamente el nivel de protección contra los efectos de las modificaciones que realizan otras transacciones.

Un nivel de aislamiento menor significa que los usuarios tienen un mayor acceso a los datos simultáneamente, con lo que aumentan los efectos de simultaneidad que pueden experimentar, como las lecturas desfasadas o la pérdida de actualizaciones. Por el contrario, un nivel de aislamiento mayor reduce los tipos de efectos de simultaneidad, pero requiere más recursos del sistema y aumenta las posibilidades de que una transacción bloquee otra. El nivel de aislamiento apropiado depende del equilibrio entre los requisitos de integridad de los datos de la aplicación y la sobrecarga de cada nivel de aislamiento. El nivel de aislamiento superior, que es serializable, garantiza que una transacción recuperará exactamente los mismos datos cada vez que repita una operación de lectura, aunque para ello aplicará un nivel de bloqueo que puede afectar a los demás usuarios en los sistemas multiusuario. El nivel de aislamiento inferior, de lectura sin confirmar, puede recuperar datos modificados pero no confirmados por otras transacciones. En este nivel se pueden producir todos los efectos secundarios de simultaneidad, pero no hay bloqueos ni versiones de lectura, por lo que se minimiza la sobrecarga.

Niveles de aislamiento del motor de base de datos

El estándar SQL-99 define los niveles de aislamiento siguientes, todos ellos compatibles con Microsoft SQL Server Database Engine (Motor de base de datos de SQL Server):

  • Lectura no confirmada (el nivel más bajo donde se aíslan las transacciones lo suficiente como para garantizar que no se leen datos físicamente dañados)
  • Lectura confirmada (nivel predeterminado del Database Engine (Motor de base de datos))
  • Lectura repetible
  • Serializable (el nivel más alto, en el que se aíslan completamente las transacciones entre sí)

SQL Server 2005 también admite dos niveles de aislamiento de transacción que utilizan el control de versiones de filas. Uno es una nueva implementación de aislamiento de lectura confirmada y el otro un nuevo nivel de aislamiento de transacción, la instantánea.

  • Cuando el valor de la opción de base de datos READ_COMMITTED_SNAPSHOT es ON, el aislamiento de lectura confirmada utiliza el control de versiones de filas para proporcionar una coherencia de lectura en las instrucciones. Las operaciones de lectura sólo requieren bloqueos de tablas SCH-S, pero no bloqueos de páginas ni filas. Cuando el valor de la opción de base de datos READ_COMMITTED_SNAPSHOT es OFF, que es el predeterminado, el aislamiento de lectura confirmada se comporta como en las versiones anteriores de SQL Server. Ambas implementaciones cumplen la definición ANSI del aislamiento de lectura confirmada.
  • El nivel de aislamiento de instantánea utiliza el control de versiones de filas para proporcionar una coherencia de lectura en las transacciones. No se adquiere ningún bloqueo de páginas ni filas en las operaciones de lectura, sólo los bloqueos de tabla SCH-S. Cuando se leen filas modificadas por otras transacciones, se recupera la versión de la fila que existía cuando empezó la transacción. El aislamiento de instantánea se habilita cuando el valor de la opción de base de datos ALLOW_SNAPSHOT_ISOLATION es ON. De forma predeterminada, el valor de esta opción es OFF para las bases de datos de usuarios.

En la tabla siguiente se muestran los efectos secundarios de la simultaneidad que permiten los distintos niveles de aislamiento.

Nivel de aislamiento Lectura desfasada Lectura no repetible Ficticia

Lectura no confirmada

Lectura confirmada

No

Lectura repetible

No

No

Instantánea

No

No

No

Serializable

No

No

No

Para obtener más información acerca de los tipos de bloqueo específicos o el control de versiones de filas que controla cada nivel de aislamiento de transacción, vea SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

Vea también

Conceptos

Efectos de la simultaneidad
Tipos de control de simultaneidad

Otros recursos

ALTER DATABASE (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005