Supongamos que una transacción de un programa actualiza los datos de una geodatabase corporativa pero, antes de que se confirme la transacción, otro programa lee los mismos datos. ¿Leerá el segundo programa los datos nuevos, pero no confirmados, o leerá los datos antiguos? La respuesta depende del nivel de aislamiento de la transacción.
Si la transacción permite que otros programas lean datos no confirmados, el segundo programa leerá los datos actualizados. Puede mejorar el rendimiento porque el segundo programa no tiene que esperar a que finalice la transacción para leer los datos. Pero hay un inconveniente: si el segundo programa lee datos que no se confirman en última instancia, habría leído datos incorrectos o datos que no existen.
Para permitir a los usuarios elegir lo mejor para su aplicación, los DBMS proporcionan niveles de aislamiento que definen cómo se aislarán los procesos subsiguientes de otros procesos que se ejecuten simultáneamente. El administrador de bases de datos puede establecer los niveles de aislamiento y aplicarlos a todas las transacciones dentro de la base de datos. También se pueden establecer dentro de una aplicación o antes de una transacción individual. Un nivel de aislamiento especifica lo siguiente:
- El grado en que las filas que la aplicación lee y actualiza están disponibles para otros procesos que se ejecutan simultáneamente.
- El grado en que las actualizaciones de otros procesos de aplicaciones que se ejecutan simultáneamente están disponibles para la aplicación.
Los DBMS permiten establecer uno de cuatro niveles de aislamiento, enumerados a continuación del aislamiento más bajo al más alto. Cada nivel se agrega a las entidades del nivel anterior. Los niveles de aislamiento más altos ofrecen un mayor grado de integridad de los datos, pero a costa de reducir la concurrencia, puesto que mantienen los bloqueos más tiempo.
LECTURA NO CONFIRMADA: permite un aislamiento mínimo de las transacciones concurrentes. La transacción puede leer los datos modificados por las transacciones concurrentes incluso antes de confirmarlos.
LECTURA CONFIRMADA: la transacción solo leerá los datos confirmados; no leerá los datos no confirmados.
LECTURA REPETIBLE: impone una restricción adicional que se aplica cuando las mismas filas se leen varias veces durante el transcurso de la transacción. Así se garantiza que, cuando se lean posteriormente las mismas filas, sean iguales.
SERIALIZABLE: este nivel de aislamiento ofrece el grado más alto de aislamiento de las transacciones concurrentes. Todas las lecturas de la transacción solo ven datos confirmados antes de comenzar la transacción, y nunca ven los cambios de la transacción concurrente confirmados durante la ejecución de la transacción.
Su DBMS puede hacer referencia a estos por otros nombres. Cada nivel funciona de manera similar en todos los DBMS, pero existen diferencias importantes. Para evitar errores en el diseño de aplicaciones y flujos de trabajo, asegúrese de entender cómo afectan los niveles de aislamiento al bloqueo y la concurrencia de su DBMS. Consulte la documentación de DBMS para obtener más información.
Para obtener información sobre cómo se aplican los niveles de aislamiento a ArcGIS, así como el potencial para problemas de concurrencia, consulte Simultaneidad y bloqueo.