1 METODOS DE RECOVERY 1.1 SHADOW PAGING Una alternativa a las técnicas basadas en logs es shadow-paging. Esta técnica es esencialmente una mejora sobre la técnica shadow-copy. En ciertas circunstancias, shadow paging puede requerir menos accesos a disco que los métodos basados en logs. Sin embargo, existen algunas desventajas del método shadow-paging, las cuales veremos a continuación. Por ejemplo, es pesado extender shadow-paging para permitir múltiples transacciones ejecutadas concurrentemente. Como antes, la base de datos es particionada en algún número de bloques de largo fijo, los cuales son referenciados como pages. El término page (página) está tomado de sistemas operativos, donde se utiliza un esquema de paging para manejo de memoria. Luego, asumimos que hay n páginas, numeradas del 1 al n (en la práctica n pueden ser cientos o miles). Estas páginas no necesitan ser almacenadas en ningún orden particular en disco. La idea clave detrás de la técnica de shadow-paging es mantener dos páginas (tablas de páginas) durante la vida de una transacción: la tabla de páginas actual y la tabla de páginas escondida (shadow page table). Cuando comienza la transacción, ambas tablas de páginas son idénticas. La tabla de páginas escondida no cambia mientras dura la transacción. La tabla de páginas actual puede cambiar cuando la transacción realiza una operación WRITE(X), y X reside en la página i-ésima. La operación WRITE es ejecutada como sigue: 1. Si la i-ésima página (que es la página en que reside cada X) aun no está en memoria principal, entonces, hacer INPUT(X). 7 2. Si ésta es la primera escritura realizada sobre la página i-ésima por esta transacción, entonces se modifica la tabla de páginas actual, como sigue: a) Encontrar en disco una página no usada. Típicamente, el sistema de BD tiene acceso a una lista de páginas no usadas (libres). b) Borrar a página encontrada en el paso anterior (2.a) desde la lista de páginas libres. c) Modificar la tabla de páginas actual tal que la i-ésima entrada apunte a la página encontrada en el punto anterior (2.a). 3. Asignar el valor de Xj a X es la página de buffer . La Fig.1 muestra un ejemplo de tablas de páginas, mientras, la Fig.2 muestra las tablas de páginas actual y shadow para una transacción realizando un WRITE sobre la cuarta página de una base de datos consistente de 10 páginas. 1 1 2 3 4 5 ... ... n Tabla de páginas Páginas de disco Fig.1: Ejemplo de tablas de páginas La Fig.1 muestra un ejemplo de tablas de páginas, mientras, la Fig.2 muestra las tablas de páginas actual y shadow para una transacción realizando un WRITE sobre la cuarta página de una base de datos consistente de 10 páginas. 1 2 3 4 5 6 ... 7 8 9 10 1 2 3 4 5 6 ... 7 8 9 10 Tabla de páginas shadow Tabla de páginas actual Páginas de disco Fig.2: Ejemplo de tablas de páginas para una transacción Intuitivamente, el planteamiento de shadow-page para recuperación es almacenar la tabla de páginas shadow en un espacio no volátil, entonces, el estado de la base de datos previo a la ejecución de la transacción, puede ser recuperado en caso de un accidente o transacción abortada. 2 Cuando la transacción termina, la tabla de páginas actual se escribe en un espacio de almacenamiento no volátil. Luego, la tabla de páginas actual pasa a ser la nueva tabla de páginas shadow. La tabla de páginas actual puede ser guardada en memoria principal (almacenamiento volátil). Nosotros no cuidamos si se pierde o no la tabla de páginas actual en un crash, puesto que la recuperación del sistema se hace usando la tabla de páginas shadow. Una recuperación exitosa requiere que encontremos la tabla de páginas shadow en disco después de un crash. Una forma simple de encontrarla es elegir una posición (localización) fija en espacio de almacenamiento estable que contenga la dirección de la tabla de páginas shadow. Cuando el sistema vuelve a levantarse después de un crash, copiamos la tabla de páginas shadow en la memoria principal, y la usamos para procesar transacciones subsecuentes. Esto porque de nuestra definición de operación WRITE, podemos garantizar que la tabla de páginas shadow apuntará a las páginas de la BD correspondientes al estado de la BD previo a cualquier transacción que estuviera activa al momento del crash. A diferencia de los esquemas basados en logs, no se necesita invocar operaciones UNDO. Al finalizar una transacción, debemos hacer lo siguiente: 1) Asegurar que todas las páginas de buffer en memoria principal que hayan sido modificadas por la transacción sean enviadas a disco. (Notar que las operaciones de salida no debieran cambiar las páginas de la BD apuntadas por alguna entrada en la tabla de páginas shadow). 2) Enviar la tabla de páginas actual a disco. Notar que no podremos sobrescribir la tabla de páginas shadow, puesto que podríamos necesitarla para recuperar el sistema de un crash. 3) Enviar la dirección de disco de la tabla de páginas actual a la localización fija en el espacio de almacenamiento estable conteniendo la dirección de la tabla de páginas shadow. Esta acción sobrescribe la dirección de la tabla de páginas shadow antigua. Por lo tanto, la tabla de páginas actual pasará a ser la tabla de páginas shadow, y la transacción está terminada. • • Si un crash ocurre antes de completar el paso 3), podremos volver al estado justo antes de la ejecución de la transacción. Si el crash ocurre después de completado el paso 3), los efectos de la transacción se preservarán. No es necesario invocar operaciones REDO. VENTAJAS Y DESVENTAJAS Shadow-paging ofrece las siguientes ventajas sobre las técnicas basadas en logs: El overhead de la salida de los registros de logs se elimina. La recuperación desde crashes es significativamente más rápida (puesto que no se necesitan operaciones UNDO y REDO). Algunas ventajas de la técnica se enumeran a continuación: Commit overhead (sobrecosto de finalización). La finalización de una sola transacción usando shadow-paging requiere múltiples bloques para terminar: los bloques de datos actuales, la tabla de páginas actual y la dirección de 3 disco de la tabla de páginas actual. Los esquemas basados en logs sólo necesitan los registros de logs para terminar, los cuales, para transacciones pequeñas típicas se ajustan a un bloque. Fragmentación de datos. Shadow-paging produce que las páginas de la BD cambien de localización cuando son actualizadas. Como resultado, o perdemos la propiedad de localidad de las páginas (que permite una transferencia más rápida de los datos) o bien, debemos reordenar esquemas complejos y altamente sobrecargados para manejo de almacenamiento físico. Garbage collector. Cada vez que finaliza una transacción, las páginas de la BD que contenían la antigua versión de los datos cambia pasando a ser inaccesibles para la transacción. En la Fig. 2, la página que apunta a la 4a entrada de la tabla de páginas shadow pasará a ser inaccesible una vez que la transacción del ejemplo finalice. Tales páginas son consideradas garbage, puesto que puesto que no son parte del espacio libre y no contienen información usable. También se genera garbage como efecto de los crashes. Periódicamente es necesario encontrar todas las páginas garbage, y agregarlas a la lista de páginas libres. Este proceso, llamado garbage collector, agrega sobrecosto y complejidad al sistema. 4