¿Qué es el aislamiento de instantáneas?
El aislamiento de instantáneas es una propiedad en el procesamiento de transacciones y las bases de datos que garantiza que todas las lecturas realizadas en una transacción vean la misma "instantánea" de la base de datos. Esto significa que la transacción se comprometerá a procesar con éxito la solicitud si sus actualizaciones no entran en conflicto con ninguna otra actualización concurrente. El aislamiento de instantáneas es un algoritmo de control para la concurrencia de versiones múltiples que proporciona niveles de aislamiento que evitan los problemas que comúnmente ocurren con la concurrencia. Este aislamiento ha sido implementado por varios servidores de lenguaje de consulta estructurado (SQL) diferentes, que operan con cantidades mínimas de anomalías de serialización. Sin embargo, los aislamientos de instantáneas no garantizarán la serialización completa en un servidor.
Muchos de los principales sistemas de gestión de datos contienen niveles de aislamiento predeterminados que no son serializables y que a menudo encuentran anomalías de serialización sin aislamiento de instantáneas. Esto puede hacer que los sistemas grandes tengan numerosas ocurrencias de errores de aislamiento todos los días, lo que puede provocar que los datos se corrompan, especialmente lo que se encuentra en las aplicaciones de almacenamiento de datos. La razón por la que un sistema podría funcionar en este estado es porque las aplicaciones que se ejecutan en niveles de aislamiento más bajos pueden mejorar la eficiencia si no se producen errores graves. La inclusión del aislamiento de instantáneas en un sistema reduce estas anomalías y, al tomar en cuenta el tiempo de operación y la cantidad de errores que ocurren, aumenta aún más la eficiencia.
Algunas bases de datos ofrecen aislamiento de instantáneas en lugar de la serialización completa, pero también hay anomalías que pueden ocurrir dentro de una base de datos que utiliza este tipo de aislamiento. Estas anomalías pueden dar lugar a violaciones de la coherencia de los datos porque las transacciones que mantienen la coherencia se intercalan o se organizan en capas alternas. La única forma de resolver el problema y prevenir anomalías como estas es manipular las aplicaciones con una introducción de bloqueos artificiales y actualizaciones conflictivas, que fueron seguidas por un análisis de los conflictos entre cada par de transacciones. Sin embargo, una forma diferente de resolver estas anomalías es modificar los algoritmos del control de concurrencia de un sistema de base de datos para hacer detecciones automáticas y prevenir las anomalías del aislamiento de instantáneas en tiempo de ejecución. Esto se puede hacer para aplicaciones importantes o arbitrarias, pero proporciona un aislamiento que es serializable.
Los servidores SQL más nuevos han podido introducir nuevos niveles de aislamiento, así como nuevos niveles de aislamiento de instantáneas para mejorar la concurrencia en ciertas aplicaciones. Cuando las primeras versiones del servidor SQL usaban el bloqueo como base para la concurrencia, el aislamiento de instantáneas depende de las mejoras en el control de versiones de filas destinadas a mejorar el rendimiento. Mejora este rendimiento cuando encuentra escenarios con bloqueo de lectura o escritura al evitarlos.