En la base de datos de sistemas, aislamiento determina la transacción integridad es visible para otros usuarios y sistemas.
Un nivel de aislamiento inferior aumenta la capacidad de muchos usuarios para acceder a los mismos datos al mismo tiempo, pero aumenta el número de efectos de concurrencia (como las lecturas sucias o actualizaciones perdidas) un usuario podría encontrarse. Por el contrario, un nivel de aislamiento más alta reduce los tipos de efectos de concurrencia que los usuarios puedan encontrar, pero requiere más recursos del sistema y aumenta las posibilidades de que una transacción bloquear a otro. [1]
El aislamiento se define típicamente a nivel de base de datos como una propiedad que define cómo / cuando los cambios realizados por una sola operación se hacen visibles a los demás. En sistemas más antiguos, que se puede implementar de forma sistémica, por ejemplo mediante el uso de tablas temporales. En los sistemas de dos niveles, se requiere una (TP) gestor de procesamiento de transacciones para mantener el aislamiento. En los sistemas de N-Capas (como varios sitios web que intentan reservar el último asiento en un vuelo), una combinación de procedimientos almacenados y gestión de transacciones se requiere para cometer la reserva y enviar confirmación al cliente. [2]
El aislamiento es uno de los cuatro ACID propiedades, junto con la atomicidad , consistencia y durabilidad .
Control de concurrencia
El control de concurrencia comprende los mecanismos subyacentes en un DBMS que el aislamiento mango y garantizar la corrección relacionados. Se muy utilizada por las bases de datos y de almacenamiento de los motores de ambos para garantizar la correcta ejecución de transacciones simultáneas, y (a través de diferentes mecanismos) la corrección de otros procesos de DBMS. Los mecanismos relacionados con la transacción típicamente limitan el tiempo de las operaciones de acceso a datos de base de datos ( horarios de transacción ) para ciertas órdenes caracterizadas como los seriabilidad y recuperabilidad propiedades de planificación. Restricción ejecución de la operación de acceso de base de datos normalmente significa un menor rendimiento (medido por las tasas de ejecución), y así los mecanismos de control de concurrencia se diseñan típicamente para proporcionar el mejor rendimiento posible en virtud de las restricciones. A menudo, cuando sea posible sin dañar la corrección, la propiedad serializabilidad se ve comprometida para un mejor rendimiento. Sin embargo, recuperabilidad no puede ser comprometida, ya que dicha típicamente resulta en una rápida violación integridad de la base de datos .
Bloqueo de dos fases es el método de control de concurrencia más transacción común en DBMS, que se utiliza para proporcionar tanto seriabilidad y recuperabilidad de la corrección. Con el fin de acceder a un objeto de base de una transacción primero necesita adquirir un bloqueo para este objeto. Dependiendo del tipo de operación de acceso (por ejemplo, leer o escribir un objeto) y en el tipo de bloqueo, la adquisición de la cerradura puede ser bloqueado y pospuesto, si otra transacción está sosteniendo un bloqueo para ese objeto.
Leer fenómenos
La ISO estándar ANSI / SQL 92 se refiere a tres diferentes fenómenos de lectura , cuando Transacción 1 lee los datos que Transacción 2 podría haber cambiado.
En los siguientes ejemplos, dos operaciones se llevan a cabo. En el primero, Consulta 1 se lleva a cabo. Luego, en la segunda transacción, Query 2 se lleva a cabo y comprometido. Finalmente, en la primera transacción, Consulta 1 se realiza de nuevo.
Las consultas utilizan la siguiente tabla de datos:
identificación | nombre | edad |
---|---|---|
1 | José | 20 |
2 | Jill | 25 |
Lecturas sucias
Una lectura sucia (también conocido como dependencia no comprometidos ) se produce cuando se permite que una transacción para leer datos de una fila que ha sido modificado por otra transacción en ejecución y aún no cometidos.
Lecturas sucias funcionan de manera similar a lecturas no repetibles ; sin embargo, no tendría que estar comprometidos para la primera consulta para devolver un resultado diferente la segunda transacción. La única cosa que puede ser prevenida en el nivel de aislamiento de lectura no confirmada está apareciendo actualizaciones fuera de servicio en los resultados; es decir, las actualizaciones anteriores siempre aparecen en un conjunto de resultados antes de las actualizaciones posteriores.
En nuestro ejemplo, la transacción 2 cambia una fila, pero no compromete a los cambios. Transacción 1, entonces lee los datos sin compromiso. Ahora bien, si la transacción 2 deshace sus cambios (ya leído por Transacción 1) o actualizaciones diferentes cambios a la base de datos, entonces la vista de los datos puede ser errónea en los registros de transacción 1.
Transacción 1 | Transacción 2 |
---|---|
/ * Consulta * 1 / SELECT edad DE usuarios DONDE ID = 1 ; / * 20 * leerá / | |
/ * Consulta * 2 / ACTUALIZACIÓN usuarios SET edad = 21 DONDE ID = 1 ; / * No se cometen aquí * / | |
/ * Consulta * 1 / SELECT edad DE usuarios DONDE ID = 1 ; / * 21 * leerá / | |
ROLLBACK ; / * Basado en la cerradura SUCIO LEER * / |
Pero en este caso no existe una fila que tiene un ID de 1 y un 21 años de edad.
Lecturas no repetibles
Una lectura no repetible se produce cuando, durante el curso de una transacción, una fila se recupera dos veces y los valores dentro de la fila difieren entre lecturas.
Lecturas no repetibles fenómeno puede ocurrir en un método de control de concurrencia basado en la cerradura cuando bloqueos de lectura no se adquieren cuando se realiza un SELECT , o cuando los bloqueos adquiridos en filas afectadas son liberados tan pronto como se realiza la operación SELECT. Bajo el control de concurrencia multiversión método, no repetible lee puede ocurrir cuando el requisito de que una transacción afectada por una cometen conflicto se relajó rollo necesidad.
Transacción 1 | Transacción 2 |
---|---|
/ * Consulta 1 * / SELECT * DE usuarios DONDE ID = 1 ; | |
/ * Consulta * 2 / ACTUALIZACIÓN usuarios SET edad = 21 DONDE ID = 1 ; COMPROMISO ; / * En concurrencia multiversión de control, o leer a base de bloqueo COMPROMETIDOS * / | |
/ * Consulta 1 * / SELECT * DE usuarios DONDE ID = 1 ; COMPROMISO ; / * Basado en la cerradura REPETIBLE LEER * / |
En este ejemplo, la transacción 2 compromete con éxito, lo que significa que sus cambios en la fila 1 con el ID deben ser visibles. Sin embargo, la transacción 1 ya se ha visto a un valor diferente para la edad en esa fila. Al SERIALIZABLE y niveles de aislamiento de lectura repetible, el DBMS debe devolver el valor anterior para la segunda SELECT. En lectura confirmada y lectura no confirmada, el DBMS puede devolver el valor actualizado; se trata de una lectura no repetible.
Hay dos estrategias básicas utilizadas para evitar lecturas no repetibles. La primera es para retrasar la ejecución de transacciones 2 hasta Transacción 1 ha cometido o se deshace. Este método se utiliza cuando se utiliza de bloqueo, y produce la serie horario T1, T2 . Una serie de horario exposiciones repetible lee comportamiento.
En la otra estrategia, tal como se utiliza en el control de concurrencia multiversión , Transacción 2 está permitido para cometer primero, que proporciona una mejor concurrencia. Sin embargo, la transacción 1, que comenzó antes de la Transacción 2, debe continuar operando en una versión anterior de la base de datos - una instantánea del momento en que se inició. Cuando Transacción 1 trata finalmente de cometer, los DBMS comprueba si el resultado de la comisión de Transacción 1 serían equivalentes a la programación T1, T2 . Si es así, entonces Transacción 1 puede proceder. Si no puede ser vista como obstante, Transacción 1 volver rollo equivalentes, con un error de serialización.
El uso de un método de control de concurrencia a base de bloqueo, en el modo de aislamiento REPEATABLE READ, la fila con ID = 1 estaría cerrada, bloqueando así de consulta 2 hasta que la primera transacción se cometió o deshace. En el modo de lectura confirmada, la segunda vez que la Consulta 1 se ejecuta, la edad habría cambiado.
Bajo multiversión el control de concurrencia, en el nivel de aislamiento SERIALIZABLE, ambas consultas SELECT ver una instantánea de la base tomada en el comienzo de la transacción 1. Por lo tanto, vuelven los mismos datos. Sin embargo, si la transacción 2 a continuación, ha intentado actualizar esa fila, así, un error de serialización ocurriría y Transacción 1 se vería obligado a volver rollo.
En el nivel de aislamiento de lectura confirmada, cada consulta ve una instantánea de la base de datos se toman al comienzo de cada consulta. Por lo tanto, cada uno de ellos ver diferentes datos para la fila actualizada. No hay error de serialización es posible en este modo (porque ninguna promesa de serializabilidad se hace) y Transacción 1 no tendrá que ser juzgado.
Lecturas fantasma
Una lectura fantasma se produce cuando, en el curso de una transacción, se añaden o eliminan por otra transacción a los registros que se lee nuevas filas.
Esto puede ocurrir cuando bloqueos de intervalo no se adquieren en la realización de un SELECT ... DONDE operación. El fantasma lee anomalía es un caso especial de lecturas no repetibles cuando Transacción 1 repite un oscilaron SELECT ... DONDE consulta y, entre ambas operaciones, transacciones 2 crea (es decir INSERT ) nuevas filas (en la tabla de destino) que cumplen ese DONDE cláusula.
Transacción 1 | Transacción 2 |
---|---|
/ * Consulta 1 * / SELECT * DE usuarios DONDE edad ENTRE 10 Y 30 ; | |
/ * Consulta 2 * / INSERT INTO usuarios ( id , nombre , edad ) VALORES ( 3 , 'Bob' , 27 ); COMPROMISO ; | |
/ * Consulta 1 * / SELECT * DE usuarios DONDE edad ENTRE 10 Y 30 ; COMPROMISO ; |
Tenga en cuenta que la transacción 1 ejecuta la misma consulta dos veces. Si el más alto nivel de aislamiento se mantuvieron, el mismo conjunto de filas debe ser devuelto en ambas ocasiones, y de hecho eso es lo que tiene el mandato de ocurrir en una operación de base de datos en el nivel de aislamiento SQL SERIALIZABLE. Sin embargo, en los niveles de aislamiento inferiores, un conjunto diferente de filas puede ser devuelto el segundo tiempo.
En el modo de aislamiento SERIALIZABLE, Consulta 1 dé lugar a todos los registros con la edad en el rango de 10 a 30 ser bloqueado, por lo tanto de consulta 2 bloquearía hasta que se haya cometido el primero transacción. En el modo REPETIBLE LEER, el rango no estaría cerrada, lo que permite el registro a insertar. Por lo tanto, la segunda instrucción de consulta 1 no volvería el mismo resultado que la primera.
Niveles de aislamiento
De los cuatro ACID propiedades en un DBMS (Sistema de Gestión de Base de Datos), la propiedad de aislamiento es la que más se relajó. Cuando se trata de mantener el más alto nivel de aislamiento, un DBMS normalmente adquiere bloqueos en los datos que pueden resultar en una pérdida de concurrencia , o implementos control de concurrencia multiversión . Esto requiere la adición lógica para la aplicación funcione correctamente.
La mayoría de los DBMS ofrecen una serie de niveles de aislamiento de transacción , que controlan el grado de bloqueo que se produce cuando la selección de datos. Para muchas aplicaciones de bases de datos, la mayoría de las transacciones de base de datos puede ser construido para evitar requerir niveles de aislamiento de altas (por ejemplo, nivel SERIALIZABLE), reduciendo así la sobrecarga de bloqueo para el sistema. El programador debe analizar cuidadosamente el código de acceso de base de datos para asegurarse de que cualquier relajación de aislamiento no causa errores de software que son difíciles de encontrar. Por el contrario, si se utilizan los niveles de aislamiento más altas, la posibilidad de estancamiento se incrementa, lo que también requiere de técnicas de programación y análisis cuidadoso para evitar.
Debido a que cada nivel de aislamiento es más fuerte que los de abajo, en el que ningún nivel de aislamiento más alta permite una acción prohibida por una más baja, la norma permite un DBMS para ejecutar una transacción en un nivel de aislamiento más fuerte que la solicitada (por ejemplo, una "lectura confirmada" transacción en realidad puede llevar a cabo a un nivel de aislamiento "lectura repetible").
Los niveles de aislamiento definidas por el ANSI / ISO SQL estándar se enumeran como sigue.
Serializable
Este es el más alto nivel de aislamiento.
Con un bloqueo basado en el control de concurrencia aplicación DBMS, serializabilidad requiere leer y bloqueos de escritura (adquiridas en los datos seleccionados) para ser lanzado al final de la transacción. También van-cerraduras deben ser adquiridos cuando un SELECT consulta utiliza una osciló DONDE cláusula, especialmente para evitar el fantasma lee fenómeno.
Cuando se utiliza control no bloqueo basado concurrencia, no hay cerraduras se adquieren; Sin embargo, si el sistema detecta una colisión de escritura entre varias transacciones concurrentes, sólo uno de ellos se le permite cometer. Ver el aislamiento de instantánea para más detalles sobre este tema.
De: (Segundo Proyecto de revisión informal) ISO / IEC 9075: 1992, la base de datos SQL-30 de Lenguaje de julio de, 1992: La ejecución de SQL-transacciones simultáneas en SERIALIZABLE nivel de aislamiento se garantiza que sea serializable. Una ejecución serializable se define para ser una ejecución de las operaciones de ejecución concurrente de SQL-transacciones que produce el mismo efecto que un poco de ejecución en serie de esos mismos SQL-transacciones. Una ejecución en serie es aquella en la que cada uno ejecuta SQL-transacción hasta su finalización antes de la próxima SQL transacción comienza.
repetible lee
En este nivel de aislamiento, una basada en la cerradura de control de concurrencia DBMS aplicación mantiene leer y bloqueos de escritura (adquirida en los datos seleccionados) hasta el final de la transacción. Sin embargo, la gama-cerraduras no se gestionan, por lo que las lecturas fantasma puede ocurrir.
Escribir inclinación es posible en este nivel de aislamiento en algunos sistemas. Escribe sesgo es un fenómeno en el que dos escrituras se permite que la misma columna (s) en una tabla por dos autores diferentes (que han leído previamente las columnas están poniendo al día), lo que resulta en la columna que tiene datos que es una mezcla de las dos operaciones . [3] [4]
Leer comprometido
En este nivel de aislamiento, una basada en la cerradura de control de concurrencia DBMS aplicación mantiene bloqueos de escritura (adquiridas en los datos seleccionados) hasta el final de la transacción, pero los bloqueos de lectura son liberados tan pronto como el SELECT se realiza la operación (por lo que el lecturas no repetibles fenómeno puede ocurrir en este nivel de aislamiento). Al igual que en el nivel anterior, gama-cerraduras no se gestionan.
Ponerlo en palabras más simples, lectura confirmada es un nivel de aislamiento que las garantías de que la lectura de datos se ha comprometido en el momento en que se lee. Simplemente restringe el lector de ver cualquier intermedia, no comprometida, 'sucio' leer. No hace ninguna promesa alguna de que si la transacción vuelve a emitir la lectura, encontrará los mismos datos; datos es libre de cambiar después de que se lee.
Leer sin compromiso
Este es el más bajo nivel de aislamiento. En este nivel lecturas sucias están permitidos, por lo que una transacción puede ver todavía-no-comprometidos cambios realizados por otras transacciones.
nivel de aislamiento predeterminado
El nivel de aislamiento predeterminado de diferentes DBMS 's varía bastante ampliamente. La mayoría de las bases de datos que ofrecen las transacciones permiten al usuario configurar cualquier nivel de aislamiento. Algunos de los DBMS también requieren sintaxis adicional cuando se realiza una instrucción SELECT para cerraduras adquieren (por ejemplo, SELECT ... FOR UPDATE para adquirir bloqueos de escritura exclusivos en filas que se accede).
Sin embargo, las definiciones anteriores han sido criticados por ser ambigua, y por no reflejar con precisión el aislamiento proporcionado por muchas bases de datos:
- Este trabajo muestra una serie de deficiencias en el enfoque de la anomalía a la definición de los niveles de aislamiento. Los tres fenómenos ANSI son ambiguos, e incluso en sus interpretaciones más flojas no excluyen algún comportamiento anómalo ... Esto lleva a algunos resultados contra-intuitivos. En particular, los niveles de aislamiento a base de bloqueo tienen características diferentes a sus equivalentes de ANSI. Esto es desconcertante porque los sistemas de bases de datos comerciales suelen utilizar implementaciones de bloqueo. Además, los fenómenos ANSI no distinguen entre un número de tipos de conductas nivel de aislamiento que son populares en los sistemas comerciales. [5]
También hay otras críticas en relación con la definición de aislamiento ANSI SQL, en el que anima a los ejecutores de hacer "cosas malas":
- ... se basa en formas sutiles en el supuesto de que un esquema de bloqueo se utiliza para el control de concurrencia, en oposición a un régimen de concurrencia optimista o multi-versión. Esto implica que la semántica propuestas están mal definidos . [6]
Niveles de aislamiento, fenómenos de lectura, y cerraduras
Niveles de aislamiento frente a fenómenos de lectura
'+' - no es posible
'-' - posible
Leer fenómenos Nivel de aislamiento | Lecturas sucias | Actualizaciones perdidas [ inconsistente ] | Lecturas no repetibles | Fantasmas |
---|---|---|---|---|
Leer sin compromiso | - | - | - | - |
Leer comprometido | + | - | - | - |
Lectura repetible | + | + | + | - |
Serializable | + | + | + | + |
Anomalía Serializable no es lo mismo que Serializable. Es decir, es necesario, pero no suficiente para que un horario Serializable debe estar libre de los tres tipos de fenómenos. [5]
Ver también
- Atomicidad
- Consistencia
- Durabilidad
- Bloquear (base de datos)
- control de concurrencia optimista
- Sistema de gestión de bases de datos relacionales
- Aislamiento de instantáneas
Referencias
- ^ "Niveles de aislamiento en el motor de base de datos", Technet, Microsoft, https://technet.microsoft.com/en-us/library/ms189122(v=SQL.105).aspx
- ^ "La arquitectura de los sistemas de procesamiento de transacción", Capítulo 23, Evolución de Sistemas de Procesamiento, Departamento de Ciencias de la Computación de la Universidad de Stony Brook, recuperado 20 de marzo de 2014, http://www.cs.sunysb.edu/~liu/cse315/23 .pdf
- ^ Vlad Mihalcea (20.10.2015). "Una guía del principiante a leer y escribir fenómenos de sesgo" .
- ^ "PostgreSQL Wiki - SSI" .
- ^ a b "Una crítica de los niveles de aislamiento ANSI SQL" (PDF) . Consultado el 29 de julio de 2012 .
- ^ fuerza de ventas (2010-12-06). "Los testimonios de clientes (SimpleGeo, CLOUDSTOCK 2010)" . www.DataStax.com: DataStax . Consultado el 9 de marzo de 2010 .
(ver arriba a unos 13:30 minutos de la transmisión por Internet!)
enlaces externos
- Conceptos de base de datos Oracle® , capítulo 13 Concordancia de datos y consistencia, puede prevenir fenómenos y niveles de aislamiento de transacciones
- Oracle de base de datos SQL , capítulo 19 sentencias SQL: SAVEPOINT para actualizar , SET TRANSACTION
- en JDBC : campos constantes de conexión , Connection.getTransactionIsolation () , Connection.setTransactionIsolation (int)
- en Spring Framework : @Transactional , Aislamiento
- P.Bailis. Cuando es "ACID" ÁCIDO? Casi nunca