Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
UNIDAD III CONCURRENCIA En un ambiente de red o multiusuario, la compartición de la base de datos por n usuarios, establece que dos ó más pueden acceder simultáneamente a la misma información, esto es conocido como acceso concurrente. En estas circunstancias se puede presentar el caso particular que dos ó más usuarios coincidan en el mismo dato, situación conocida como colisión. Transacción A FIND R COPY R.F to Atemp UPDATE R REPLACE R.F BY ATEMP+1 -
Tiempo | T1 | | | | T2 | | | | T3 | | | | T4 |
Transacción B FIND R COPY R.F to Btemp UPDATE R REPLACE R.F BY BTEMP+1
Si no lo controlamos podemos tener una pérdida de actualización. En el t1 el usuario A lee el registro ; en el t2 el usuario B lo lee, en el t3 lo actualiza A y en el t4 lo actualiza B y se pierde lo que actualizo A (colisión).
18
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
Solución : Sistema de candados ; ahora es XFIND, localizar y bloquear, el registro, y el sistema le pone un candado para que solo lo use el usuario A, y nadie lo podrá usar hasta que el usuario A lo deje de utilizar. El usuario B trata de accesar y el sistema detecta que el registro tiene un candado y no le pertenece a B, lo detiene hasta que A deja de utilizar el registro. Cuando esto pasa y accesa B, entonces se le pone un candado de que pertenece a B. Transacción A XFIND R COPY R.F to Atemp UPDATE R REPLACE R.F BY ATEMP+1 RELEASE R -
Tiempo | T1 | | | | T2 | | | | T3 | | | | T4 | | | | T5 | | | | T6 | | | | T7
19
Transacción B XFIND R ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA (RESUME) XFIND R COPY R.F TO Btemp UPD R REPLACE R.F BY Btemp+1 RELEASE R
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
Mientras estemos capturando datos, no vamos a bloquear registros, eso se deja hasta el proceso de actualización.
Alternativas de Bloqueo A) Método optimista : Considera que es poco probable que ocurra una colisión, y determina poner candados a los registros que se utilizan (bloqueo), desde las fases iniciales del proceso de actualización (captura de datos). Esta alternativa es muy segura y relativamente fácil de implementar, desafortunadamente, si llega a ocurrir una colisión afectara por un buen periodo de tiempo al usuario que espera. B) Método pesimista : Considera que es muy probable que se presente una colisión, por tal motivo determina postergar el bloqueo de los registros hasta el momento de la actualización. Es de uso generalizado pero presenta el riesgo de que ocurra un bloqueo muerto (interbloqueo). Interbloqueo(dead lock espera mutua) : Se le conoce también como bloqueo mutuo. Transacción A XFIND R1 XFIND R2 ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA
Tiempo | T1 | | | | T2 | | | | T3 | | | | T4 | | | |
20
Transacción B XFIND R2 XFIND R1 ESPERA ESPERA ESPERA ESPERA
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
Para solucionar un bloqueo muerto tenemos las siguientes alternativas : A) Aplicar un ROLLBACK que consiste en deshacer la transacción Transacción A XFIND R1 XFIND R2 ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA *** ROLLBACK *** *** & RETRY ***
-
Tiempo | T1 | T2 | | T3 | | T4 | | | T5 | | T6 | |
Transacción B XFIND R2 XFIND R1 ESPERA ESPERA ESPERA ESPERA ESPERA ESPERA (RESUME) XFIND R1 -
Después de haberse interbloqueado, se hace un reproceso al que tenga 30 segundos(mayor antigüedad), en este caso el A que esta en espera desde el t3. B) Aplica ROLLBACK por prioridad. Transacción A XFIND R1 XFIND R2 Espera Espera Espera -
Tiempo | T1 | | T2 | | T3 | | T4 | |
21
Transacción B XFIND R2 -
XFIND R1 *** ROLLBACK *** *** & RETRY ***
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
Se necesita de un registro adicional que contenga : Identificación de usuario Nombre de la transacción Hora de inicio Registros que esta actualizando Y Una marca que indique si puede seguir trabajando o debe de aplicar un ROLLBACK.
Protocolo de comisión de 2 fases (para bloqueos) 1.-En esta fase de crecimiento se inicia con el bloqueo del 1er. registro del conjunto que se va a actualizar y finaliza cuando termina la actualización. No se permite liberar registros en esta etapa. 2.-Fase de encogimiento empieza con la liberación de un registro, y no se permite bloquear registros ya liberados. Alternativas para aplicar ROLLBACK para plataformas anteriores A) Simular la actualización o simulando el ROLLBACK. Revisar todos los registros que se van a actualizar, ponerles candado y si no se puede a todos, entonces liberarlos, y empezar otra vez. SET MULTILOCKS ON M TERM = .T. DO WHILE MTERM DO VERIFICA END DO DO ACTUALIZA
22
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
PROCEDURE VERIFICA SELE FAC_DET SEEK MFACT DO WHILE FACTURA = MFACT .AND. .NOT. EOF() SELE INVENTARIO SEEK FACT_DET.PARTE DO WHILE .T. IF .NOT. RLOCK() WAIT WINDOW “REGISTRO” + FACT_DET.PARTE + ; “OCUPADO, REINTENTAR S/N” TO MRES IF MRES $ “Ss” LOOP ELSE UNLOCK ALL RETURN ENDIF ELSE && IF .NOT. RLOCK() EXIT ENDIF ENDDO SELE FACT_DET SKIP ENDDO MTERM = .F. ** FIN VERIFICA
23
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
B) Actualización con técnicas de árbol :
Si los registros que se actualizan se ordenan ascendentemente, no se evitan las colisiones, pero si se elimina la posibilidad de un bloqueo muerto , ya que en cada instante y para cada usuario el requerimiento de candados, es sobre registros de valor mayor (hacia delante, nunca hacia atrás). Considerar en el 1er. Ejemplo, que el usuario U1 actualizará los registros B,C y H, y el usuario U2 los registros A y C : si llegan al mismo tiempo, en t1 el usuario U1 bloquea B, y U2 bloquea A; en el t2 U1 logra el candado para C, por lo tanto U2 debe de esperar. Como se puede ver U2 esperará hasta que U1 termine, y no hay posibilidad de que U1 requiera un registro ya bloqueado por U2, esto debido a que va solicitando candados en registros mayores. Lo mismo sucede en el 2º. Ejemplo, donde U1 actualiza A,F y G, y el U2 va por G y J.
INVENTARIO A B C D E F G H I J
U1
U2 *
* *
U1 *
U2
ESPERA
* ESPERA
*
* *
Para lograr lo anterior es necesario contar con un ordenamiento ó índice adicional , compuesto por el documento principal que se actualiza, más la clave del registro por actualizar.
24
Instituto Tecnológico de la Laguna
Base de Datos II
Academia de Sistemas y Computación.
INDEX ON FACTURA TAG FAC FAC_DET FACTURA 1000 1000 1000 1000
PARTE F G A J
CANTIDAD
Nosotros Debemos de hacer la actualización en forma ordenada. INDEX ON FACTURA + PARTE TAG ARBOL
A B C D E F G H I J
U1 *
U2 *
* *
* ESPERA
Nota: INDEX ON ... REINDEX PACK No deben de aparecer dentro de un programa normal, sino al crear la tabla. Si solo fueran esos dos índices pondríamos : SET ORDER TO 2 Primero ordena por factura, así lo ve el usuario y luego se ordena por factura más parte.
25