Segundo Parcial 11/06/08 (Bases de Datos)
De Cuba-Wiki
Enunciado
Optimización
Algebraica
Consulta SQL:
SELECT P.DNI, P.nombre, P.fecha-nacimiento, M.nombre, C.fecha FROM PACIENTE P, MEDICO M, CONSULTA C WHERE P.DNI = C.DNI AND M.matricula =C.matricula AND C.fecha>=’01/01/2008’ AND M.especialidad=’Cardiología’
Consulta algebraica:
Arbol canonico:
Proyeccion | Seleccion | Join / \ Join C / \ P M
Cálculo de Costos
El index scan sobre paciente tiene un costo de input de 56 accesos, y un costo de salida por la materialización de 53 accesos.
El INLJ tiene un costo de entrada de 121298, sin costo de salida pues se hace pipe hacia la proyeccion.
El costo total entonces es de 122037.
La salida tiene un costo de 7500.
Transacciones
Serializabilidad
- H1 no es equivalente
- H2 no es equivalente
- H3 sí es equivalente
Recuperabilidad
- H0 ST
- H1 ST
- H2 ST
- H3 ACA
- H4 ST
Logging
Punto A
Undo logging con checkpoint no-quiescente:
- <START T2>
- <T2, X, 0>
- <T2, Z, 0>
- <START CKPT(T2)>
- <START T3>
- <START T1>
- <T3, Z, 1>
- <T1, X, 1>
- <T1, Y, 0>
- <START T4>
- <T4, Y, 1>
- <T2, X, 2>
- <T2, Z, 2>
- <COMMIT T2>
- <END CKPT>
- <T1, X, 3>
- <COMMIT T1>
- <T3, Z, 3>
- <COMMIT T3>
- <T4, X, 4>
- <COMMIT T4>
El checkpoint se puede terminar cuando todas las transacciones terminan de alguna manera, en este caso solo esperamos a que commitee T2.
Punto B
- <START T2>
- <T2, X, 1>
- <T2, Z, 1>
- <START T3>
- <START T1>
- <T3, Z, 2>
- <T1, X, 2>
- <T1, Y, 1>
- <START T4>
- <T4, Y, 2>
- <T2, X, 3>
- <T2, Z, 3>
- <COMMIT T2>
- <T1, X, 4>
- <COMMIT T1>
- <T3, Z, 4>
- <COMMIT T3>
- <T4, X, 5>
- <COMMIT T4>
En mi cuatrimestre no vimos Redo-Quiescente, el que lo haya visto puede completar el checkpoint.
Punto C
- <START T2>
- <T2, X, 0, 1>
- <T2, Z, 0, 1>
- <START T3>
- <START T1>
- <T3, Z, 1, 2>
- <T1, X, 1, 2>
- <T1, Y, 0, 1>
- <START T4>
- <T4, Y, 1, 2>
- <T2, X, 2, 3>
- <T2, Z, 2, 3>
- <COMMIT T2>
- <T1, X, 3, 4>
- <COMMIT T1>
- <T3, Z, 3, 4>
- <COMMIT T3>
- <T4, X, 4, 5>
- <COMMIT T4>