Successfully reported this slideshow.

Concurrencia bases datos 2

7,090 views

Published on

  • Be the first to comment

  • Be the first to like this

Concurrencia bases datos 2

  1. 1. Control de concurrencia
  2. 2. Transacciones <ul><li>Ejecución simultánea de programas de usuario es esencial para el buen desempeño de DBMS. </li></ul><ul><ul><li>Debido a que los accesos a disco son frecuentes, y relativamente lentos, es importante mantener el CPU trabajando en varios programas de usuario al mismo tiempo. </li></ul></ul><ul><li>Un programa de usuario puede llevar a cabo varias operaciones en los datos recuperados de la base de datos, pero el DBMS sólo está preocupado por los datos que se leen / escriben desde / hacia la base de datos. </li></ul><ul><li>Una transacción es una vista abstracta del DBMS de un programa de usuario: una secuencia de lecturas y escrituras. </li></ul>
  3. 3. Concurrencia en un DBMS <ul><li>Los usuarios envían las transacciones, y se puede pensar de cada transacción , que se ejecuta por sí mismo. </li></ul><ul><ul><li>Se logra concurrencia por el DBMS, que entrelaza las acciones (lee / escribe de objetos BD) de las diversas transacciones. </li></ul></ul><ul><ul><li>Cada transacción debe dejar la base de datos en un estado consistente si la BD es consistente cuando comienza la transacción. </li></ul></ul><ul><ul><ul><li>El DBMS no entiende la semántica de los datos. (por ejemplo, no entiende cómo se calcula el interés en una cuenta bancaria). </li></ul></ul></ul>
  4. 4. Atomicidad de las transacciones <ul><li>Una transacción puede hacer commit después de completar todas sus acciones, o puede abortar (o ser abortado por el DBMS) después de ejecutar algunas acciones. </li></ul><ul><li>Una propiedad muy importante garantizada por el DBMS para todas las transacciones es que son atómicas . </li></ul><ul><ul><li>DBMS registra en logs todas las acciones para que se pueda deshacer las acciones de las operaciones abortadas. </li></ul></ul>
  5. 5. ACID <ul><li>Atómico </li></ul><ul><li>Consistencia </li></ul><ul><ul><li>debe dejar la base de datos en un estado consistente </li></ul></ul><ul><li>Aislamiento ( Isolation) </li></ul><ul><ul><li>&quot;Protegido&quot; de los efectos de programar concurrentemente otras transacciones </li></ul></ul><ul><li>durabilidad </li></ul><ul><ul><li>Los efectos deben persistir incluso si el sistema falla antes de que todos los cambios se reflejen en disco. </li></ul></ul>
  6. 6. Ejemplo <ul><li>Considere dos transacciones : </li></ul>T1: BEGIN A=A+100, B=B-100 END T2: BEGIN A=1.06*A, B=1.06*B END <ul><li>Intuitivamente, la primera transacción transfiere $100 de la cuenta B a la cuenta A. La segunda es la acreditación de las dos cuentas con un pago de interés del 6%. </li></ul><ul><li>No hay garantía de que T1 se ejecutará antes de T2 o viceversa, si ambos se envían juntos. Sin embargo, el efecto neto debe ser equivalente a las dos transacciones ejecutándose en serie en algún orden. </li></ul>
  7. 7. Ejemplo(Cont.) <ul><li>Considere un posible entrelazado (horario): </li></ul>T1: A=A+100, B=B-100 T2: A=1.06*A, B=1.06*B <ul><li>Esto está bien. Pero qué ocurre si: </li></ul>T1: A=A+100, B=B-100 T2: A=1.06*A, B=1.06*B <ul><li>La vista del DBMS del segunda horario: </li></ul>T1: R(A), W(A), R(B), W(B) T2: R(A), W(A), R(B), W(B)
  8. 8. Programando Transacciones <ul><li>Horario serial: Programa no entralaza las acciones de las diferentes transacciones. </li></ul><ul><li>Horario equivalentes: Para cualquier estado de base de datos, el efecto (en el conjunto de objetos en la base de datos) de la ejecución del primera horario es idéntica a los efectos de la ejecución del segundo horario. </li></ul><ul><li>Horario Serializable : Un programa que es equivalente a alguna ejecución en serie de las transacciones. (Nota: Si cada transacción mantiene consistencia, todos los horarios serializables preservan la consistencia.) </li></ul>
  9. 9. Anomalías con ejecuciones entrelazadas <ul><li>Lectura de datos sin confirmar (conflictos WR, &quot;lecturas sucias&quot;): </li></ul><ul><li>Lecturas Irrepetibles (conflictos RW): </li></ul>T1: R(A), W(A), R(B), W(B), Abort T2: R(A), W(A), C T1: R(A), R(A), W(A), C T2: R(A), W(A), C
  10. 10. Anomalía (Cont.) <ul><li>Sobrescribir datos no confirmados (conflictos WW): </li></ul>T1: W(A), W(B), C T2: W(A), W(B), C
  11. 11. Bloqueo basado en Control de concurrencia <ul><li>Protocolo Estricto bloqueo de dos fases (2PL estricto): </li></ul><ul><ul><li>Cada transacción debe obtener un bloqueo S (compartido) en el objeto antes de leer, y un bloqueo X (exclusivo) en el objeto antes de escribir. </li></ul></ul><ul><ul><li>Todos los bloqueos efectuados por una transacción se liberan cuando se complete la transacción </li></ul></ul><ul><ul><ul><li>(No estricto) 2PL Variante: libera los bloqueos en cualquier momento, pero no pueden adquirir bloqueos después de la liberación de cualquier bloqueo. </li></ul></ul></ul><ul><ul><li>Si una transacción mantiene un bloqueo X en un objeto, ninguna otra transacción puede obtener un bloqueo (S o X) en ese objeto. </li></ul></ul><ul><li>2PL estricto sólo permite horarios serializables. </li></ul><ul><ul><li>Además, simplifica la anulación de transacciones </li></ul></ul><ul><ul><li>(No estricto) 2PL también permite sólo horarios serializables, pero implica procesos más complejos de abortar </li></ul></ul>
  12. 12. Cancelación de una transacción <ul><li>Si una transacción Ti se aborta, todas sus acciones tienen que ser deshechas. No sólo eso, si Tj lee un objeto escrito últimamente por Ti, Tj debe ser abortado también! </li></ul><ul><li>La mayoría de los sistemas evitan estos abortos en cascada liberando un bloqueo de una transacción sólo durante el commit. </li></ul><ul><ul><li>Si Ti escribe un objeto, Tj puede leer esto sólo después que Ti hace commit. </li></ul></ul><ul><li>Con el fin de deshacer las acciones de una transacción anulada, el DBMS mantiene un registro en el que se registra cada escritura. Este mecanismo se utiliza también para recuperarse de los fallos del sistema: todas las transacciones activas en el momento del accidente se anulan cuando el sistema vuelve a funcionar. </li></ul>
  13. 13. El Log <ul><li>Las siguientes acciones se registran en el log: </li></ul><ul><ul><li>Ti escribe un objeto : el valor antiguo y el nuevo valor. </li></ul></ul><ul><ul><ul><li>El log debe ir a la disco antes de la página que ha cambiado! </li></ul></ul></ul><ul><ul><li>Ti commits/aborta : un log que indique esta acción. </li></ul></ul><ul><li>Las entradas de registro se encadenan por id de transacción, así que es fácil deshacer una transacción específica. </li></ul><ul><li>El log es a menudo duplicado y archivado en un almacenamiento estable. </li></ul><ul><li>Todas las actividades relacionadas al log (y de hecho, todas las actividades relacionadas con el bloqueo / desbloqueo, tratar con bloqueos, etc) se manejan de forma transparente por el DBMS. </li></ul>
  14. 14. Recuperarse de un fallo <ul><li>Hay tres fases en el algoritmo de recuperación Aries: </li></ul><ul><ul><li>Análisis : Analizar el log hacia adelante(desde el punto de comprobación más reciente) para identificar todos las transacciones que estaban activas, y todas las páginas sucias en el grupo de búferes en el momento del accidente. </li></ul></ul><ul><ul><li>Rehacer : Rehace todas las actualizaciones de las páginas sucias en el búfer pool, según sea necesario, para asegurar que todas las actualizaciones que se registran de hecho se lleven a cabo y sean escritas en el disco. </li></ul></ul><ul><ul><li>Deshacer : Las escrituras de todas las transacciones que estaban activas en el fallo se deshacen (restaurando el valor antes de la actualización, que está en el expediente de registro para la actualización), yendo hacia atrás en el log. (Se debe tener cuidado al manejar el caso de un fallo que ocurra durante el proceso de recuperación!) </li></ul></ul>
  15. 15. Resumen <ul><li>El control de concurrencia y la recuperación se encuentran entre las más importantes funciones proporcionadas por un DBMS. </li></ul><ul><li>Los usuarios no necesitan preocuparse acerca de la concurrencia. </li></ul><ul><ul><li>El sistema inserta automáticamente peticiones de bloquear/desbloquear y programa acciones de diferentes transacciones, de tal forma que se garantice que la ejecución resultante es equivalente a ejecutarlas una después de la otra en algún orden. </li></ul></ul><ul><li>Registro de escritura anticipada (WAL) se utiliza para deshacer las acciones de las operaciones abortadas y para restaurar el sistema a un estado consistente después de un fallo. </li></ul><ul><ul><li>Estado consistente: sólo los efectos de transacciones con commit se pueden ver. </li></ul></ul>
  16. 16. Revisión <ul><li>DBMSs soportan concurrencia, recuperación de fallos con: </li></ul><ul><ul><li>Las transacciones ACID (atómicas, Consistencia, Aislamiento, Durabilidad) </li></ul></ul><ul><ul><li>Registro de las operaciones </li></ul></ul><ul><li>Una ejecución en serie de transacciones es seguro pero lenta </li></ul><ul><ul><li>Tratar de encontrar los horarios equivalentes a la ejecución en serie </li></ul></ul><ul><li>Una solución para el horario serializable es 2PL </li></ul>
  17. 17. Conflicto de Horarios serializables <ul><li>Dos horarios son equivalentes en conflicto si: </li></ul><ul><ul><li>Involucra a las mismas acciones de las mismas transacciones </li></ul></ul><ul><ul><li>Cada par de acciones en conflicto se ordena de la misma manera </li></ul></ul><ul><li>Horario S es serializable en conflicto si S es equivalente a un conflicto de horario serial </li></ul>
  18. 18. Ejemplo <ul><li>Un horario que no tiene conflicto serializable: </li></ul><ul><li>El ciclo en el gráfico revela el problema. La salida de T1 depende de T2 , y viceversa. </li></ul>T1: R(A), W(A), R(B), W(B) T2: R(A), W(A), R(B), W(B) T1 T2 A B Gráfico de dependencia
  19. 19. Gráfico de dependencia <ul><li>Gráfico de dependencia : un nodo por transacción; flecha de Ti a Tj si una operación de Ti tiene conflicto con una operación de Tj y Ti aparece en el calendario antes de la operación en conflicto de Tj. </li></ul><ul><li>Teorema: El horario es conflicto serializable si y sólo si su grafo de dependencias es acíclico </li></ul>
  20. 20. Vista Serializable <ul><li>Horarios S1 y S2 son equivalentes en vista si: </li></ul><ul><ul><li>Si Ti lee el valor inicial de A en S1, entonces Ti también lee el valor inicial de A en S2 </li></ul></ul><ul><ul><li>Si Ti lee el valor de A escrito por Tj en S1, entonces Ti también lee el valor de A escrito por Tj en S2 </li></ul></ul><ul><ul><li>Si Ti escribe el valor final de A en S1, entonces Ti también escribe el valor final de A en S2 </li></ul></ul><ul><li>Serialización de vista es &quot;más débil&quot; que la serialización conflicto! </li></ul><ul><ul><li>Cada horario de conflicto serializable es vista serializable, pero no al revés! Es decir admite más horarios legales </li></ul></ul>T1: R(A) W(A) T2: W(A) T3: W(A) T1: R(A),W(A) T2: W(A) T3: W(A)
  21. 21. Deadlocks <ul><li>Deadlock: Ciclo de transacciones esperando por bloqueos que se liberarán por cada uno. </li></ul><ul><li>Dos formas de tratar con deadlocks : </li></ul><ul><ul><li>prevención de Deadlock </li></ul></ul><ul><ul><li>detección de Deadlock </li></ul></ul>
  22. 22. Prevención de Deadlock <ul><li>Asignar prioridades en base a timestamps . Supongamos que Ti quiere un lock que tiene Tj. Dos políticas son posibles: </li></ul><ul><ul><li>Wait-Die: Si Ti tiene mayor prioridad, Ti espera por Tj, de lo contrario se anula Ti </li></ul></ul><ul><ul><li>Wound-wait: Si Ti tiene mayor prioridad, se aborta Tj, de lo contrario Ti espera </li></ul></ul>
  23. 23. Detección de Deadlock <ul><li>Crear un gráfico de espera : </li></ul><ul><ul><li>Los nodos son las transacciones </li></ul></ul><ul><ul><li>Hay una ventaja de Ti a Tj si Ti está esperando a Tj para liberar un bloqueo </li></ul></ul><ul><li>Revise periódicamente los ciclos en el gráfico de espera </li></ul>
  24. 24. Detección de Deadlock(Cont.) <ul><li>Ejemplo: </li></ul><ul><li>T1: S(A), S(D), S(B) </li></ul><ul><li>T2: X(B) X(C) </li></ul><ul><li>T3: S(D), S(C), X(A) </li></ul><ul><li>T4: X(B) </li></ul>T1 T2 T4 T3 T1 T2 T4 T3
  25. 25. Detección de Deadlock (cont.) <ul><li>En la práctica, la mayoría de los sistemas practican detección </li></ul><ul><ul><li>Los experimentos muestran que la mayoría de espera para los ciclos son de longitud 2 o 3 </li></ul></ul><ul><ul><li>Por lo tanto, pocas transacciones deben anularse </li></ul></ul><ul><ul><li>Las implementaciones pueden variar </li></ul></ul><ul><ul><ul><li>Puede construir el gráfico y periódicamente buscar ciclos </li></ul></ul></ul><ul><ul><ul><li>Puede hacer un esquema &quot;tiempo fuera&quot; : si usted ha estado esperando un bloqueo desde hace mucho tiempo, se asume que es un deadlock y aborta </li></ul></ul></ul>

×