Procesamiento de transacciones Modelo de Almacenamiento Cuando se ejecuta una transacción WRITE no es necesario escribir la actualización en disco. El WRITE solo afecta a un copia de los datos en el registro intermedio (BUFFER) de la base de datos en la memoria principal. La operación OUTPUP posterior que realice el sistema en una pagina de datos modificara la base de datos. La memoria principal tiene tres registros intermedios : Registro intermedio del sistema. Este registro intermedio tiene paginas de código objeto del sistema y las tareas de trabajo locales de las transacciones activas. Registro intermedio Bitácora. Contiene registros de bitácora hasta que se graban en el almacenamiento estable. Registro intermedio de la base de datos Contiene paginas de la base de datos, lo gestiona el sistema de base de datos o bien el sistema operativo, durante un volcado de la base de datos, las paginas se graban en almacenamiento estable en archivos. El almacenamiento secundario se divide en varias categorías : • Código objeto del sistema, el código para el sistema • Área de recopia de memoria virtual. Área de disco usada para almacenar información de trabajo locales que no se guardan en memoria principal. • Almacenamiento estable en archivos, contiene solo los datos necesario para recuperación de fallos de almacenamiento no volátil. Se resalta que todos comparte el registro intermedio de bitácora y el registro intermedio de bitácora y el registro intermedio de la base de datos, pero cada una tiene su propia área de trabajo local. Recuperación de fallos En un sistema que permite la ejecución concurrente, también es necesario garantizar que cualquier transacción concurrente T1 que sea dependiente de T ( es decir, T1 lee datos que T escribe ). Retroceso en cascada En algunos caso el echo de recuperar una transacción puede ser necesario retroceder varias transacciones. Esto ocurre si las transacciones han leído datos que T ha escrito. Este fenómeno, en el que un simple fallo de una transacción conduce a una serie de retrocesos de transacciones, se llama retroceso en cascada. Ejemplo : T1 T2 T3 1 Read(A) Read(B) Write(A) Read (A) Write(A) Read(a) Planificaciones recuperables Los sistemas de procesamiento de transacciones deben garantizar que posible recuperarse del fallo de cualquier transacción activa. De tal manera que existe un algoritmo de recuperación y verificación a la hora de realizar la actualización de un determinado registro. Exploración de Bitácora En un sistema de procesamiento de transacciones concurrentes es necesario que el registro de bitácora de puntos de verificación sea de la forma ( CHECKPOINT L ), donde L, es una lista de transacciones activas en el momento del punto de verificación. Cuando el sistema se recupera de una caída el sistema construye dos listas : Lista Deshacer, que consta de la lista de deshacer. Lista Volver a Hacer, que consta de las transacciones que se deben repetir. Gestión del Bloqueo Si existe un conjunto de transacciones de manera que cada transacción esta esperando a que a otra transacción del conjunto diremos que se encuentra en estado de bloqueo. Para evitar esta situación existe un protocolo de prevención de bloqueo para garantizar que el sistema nunca entrara en una estado de bloqueo. Prevención de bloqueos Existen varios esquemas para que se pueden utilizar para la prevención de bloqueos. El mas sencillo es el que requiere que cada transacción bloquee todos sus daros antes de empezar a ejecutarse. Este protocolo tiene dos desventajas : • La utilización de datos puede ser muy baja aunque los datos no se usen por mucho tiempo. • Por inanición, una transacción que necesita varios datos muy solicitados puede que tenga que esperar indefinidamente. Otro método es la de imponer un orden parcial de los datos y exigir que una transacción pueda bloquear un dato. Otro método es la expropiación donde se puede asignar una hora de entrada única a cada transacción. 2 Detección y recuperación de bloqueo Si un esquema no utiliza algún protocolo que garantice la libertad de bloqueo, debe emplearse un esquema de detección y recuperación. Cada cierto tiempo se examina el estado del sistema para ver si existe algún bloqueo. Niveles Débiles de consistencia Consistencia de grado dos Lo que pretende es evitar el aborto en cascada sin garantizar la serializabilidad, utiliza los dos mismos modos de bloqueo que utilizamos para el protocolo de bloqueo de dos fases compartido y exclusivo. Los bloqueos S se pueden liberar en cualquier momento y se pueden adquirir en cualquier momento. Los exclusivos no se pueden liberar en cualquier momento sino hasta que la transacción se termine o aborte. Sistemas de transacciones de alto rendimiento Para esto se requiere Hardware de alto rendimiento y explotar el paralelismo, además, no solo esto es suficiente para obtener el alto rendimiento en el procesamiento de transacciones existen dos razones mas : • Muchas operaciones de conmutación • Los registros de bitácora que se escriban en almacenamientos estables antes que las paginas de buffer se puedan grabaren disco. Base De Datos en memoria principal El rendimiento de las bases de datos esta limitado por la velocidad con que se lee los datos y se escriben en el disco. La limitante de grabado en disco se puede incrementar con el buffer de la base de datos. Debido al avance tecnológico de la memoria principal y la disminución de su costo, hoy día se puede tener dispuesta la base de datos en esta memoria para algunas aplicaciones de manera que para grandes bases de datos solo podrá contener una parte, esto permite que el procesamiento sea mucho mas rápido. Concurrencia en estructuras de índices Existen características especiales de las estructuras de índices que permiten utilizar enfoques alternativos : • Un índice contiene una dato que no es único. Es decir el índice se puede reconstruir a partir de la base de datos si ocurre un fallo. • Es aceptable tener acceso concurrente no serializable a un índice mientras se mantenga la exactitud de los datos. De esta menara podemos realizar : Búsquedas Inserciones y eliminaciones Partición Definición de transacción en SQL 3 El lenguaje SQL estándar especifica que una transacción comienza implícitamente. La transacción termina al final de una unidad de trabajo o por una de las siguientes sentencias : Commit Work, que termina la transacción actual y empieza una nueva. Roolback Work, que causa que la transacción actual aborte. Transacciones de larga duración Se presentan serios problemas cuando este concepto se aplica a base de datos que implica interacción humana. Estas interacciones tienen las siguientes propiedades clave: • Larga Duración El procesamiento puede ser lento en el momento en que el usuario interactúa con la información, comparado a el procesamiento del computador. • Exposición de datos no ejecutados Las transacciones ejecutadas podrían ser abortadas de tal manera que otras transacciones pueden ser forzadas a leer datos no ejecutados. • Subtareas Una transacción podría constar de un conjunto de subtareas iniciadas por el usuario de manera que se podría abortar y no necesariamente otras transacciones sean abortadas. • Recuperabilidad Una transacción activa debe recuperarse a un estado que exista poco antes de la caída de forma que pierda relativamente poco trabajo humano. • Rendimiento El buen rendimiento el procesamiento transaccional se define como tiempo de respuesta rápido, a diferencia de sistema no interactivos. ( Transacciones por segundo.) Control De Concurrencia El control de concurrencia debe garantiza que la base de datos no pierda consistencia. Por lo que el concepto de serializabilidad logra este objetivo ya que todas las planificaciones que conserva la base de datos son seriabilizables. 4