Beruflich Dokumente
Kultur Dokumente
Es fundamental que siempre se cree un registro en la bitcora cuando se realice una escritura antes de que se modifique la base de datos. Tambin tenemos la posibilidad de deshacer una modificacin que ya se ha escrito en la base de datos, esto se realizar usando el campo del valor antiguo de los registros de la bitcora. Los registros de la bitcora deben residir en memoria estable como resultado el volumen de datos en la bitcora puede ser exageradamente grande. Las operaciones COMMIT y ROLLBACK establecen lo que se le conoce como punto de sincronizacin lo cual representa el lmite entre dos transacciones consecutivas, o el final de una unidad lgica de trabajo, y por tanto al punto en el cual la base de datos esta (o debera estar) en un estado de consistencia. Las nicas operaciones que establecen un punto de sincronizacin son COMMIT, ROLLBACK y el inicio de un programa. Cuando se establece un punto de sincronizacin: Se comprometen o anulan todas las modificaciones realizadas por el programa desde el punto de sincronizacin anterior. Se pierde todo posible posicionamiento en la base de datos. Se liberan todos los registros bloqueados. Es importante advertir que COMMIT y ROLLBACK terminan las transaccin, no el programa.
Los ndices agrupados, definen el orden en que almacenan las filas de la tabla (nodos hoja/pgina de datos de la imagen anterior). La clave del ndice agrupado es el elemento clave para esta ordenacin; el ndice agrupado se implementa como una estructura de rbol b que ayuda a que la recuperacin de las filas a partir de los valores de las claves del ndice agrupado sea ms rpida. Las pginas de cada nivel del ndice, incluidas las pginas de datos del nivel hoja, se vinculan en una lista con vnculos dobles. Adems, el desplazamiento de un nivel a otro se produce recorriendo los valores de claves.
Indices no agrupados
Los ndices no agrupados tienen la misma estructura de rbol b que los ndices agrupados, con algunos matices; como hemos visto antes, en los ndices agrupados, en el ltimo nivel del ndice (nivel de hoja) estn los datos; en los ndices noagrupados, en el nivel de hoja del ndice, hay un puntero a la localizacin fsica de la fila correspondiente en el ndice agrupado. Adems, la ordenacin de las filas del ndice est construida en base a la(s) columna(s) indexadas, lo cual no quiere decir (a diferencia de los ndices agrupados), que la organizacin fsica de las pginas de datos corresponda con el ndice.
Integridad, Chequeo de Consistencia, Copias de Seguridad o Compactacin de las bases. Pero tambin es necesario ejecutar trabajos de mantenimiento cuyos objetivos sean el de mantener la performance de las bases de datos y evitar su degradacin. Esos trabajos son la Reorganizacin de ndices y la Actualizacin de Estadsticas. Estos trabajos son independientes del estado de la base de datos. Puede ocurrir que a la base le falten estudios de optimizacin pero, al menos, mantendremos la performance actual. Si la base se encuentra optimizada, entonces ms an, son necesarios para evitar la degradacin producto del uso continuo. Cualquiera de estos trabajos deben realizarse fuera de lnea por motivos de: alto consumo de recurso y bloqueo de las tablas en el momento de ejecucin. Las tablas que contienen ndices al ser actualizadas o por insercin de nuevos datos, generan fragmentacin de estos ndices. Estas fragmentaciones conllevan a la prdida de performance al acceder a ellas. La instruccin DBCC DBREINDEX reorganiza el ndice de una tabla o todos los ndices definidos para una tabla. La reorganizacin de realiza dinmicamente sin necesidad de conocer la estructura de la misma o las restricciones que ella tenga. Por lo tanto no es necesario conocer si una tabla tiene clave primaria o si esta clave es nica y adems pertenece a algn ndice, ya que la reorganizacin no necesita eliminar y recrear stas restricciones para realizar su trabajo. La sintaxis de esta instruccin es: DBCC DBREINDEX ( basededatos.dueo.nombre_de_tabla [ , ndice [ , fillfactor ] ] ) [ WITH NO_INFOMSGS ] Fillfactor es el porcentaje de espacio de pgina destinado a ser ocupado. El valor definido reemplaza al que fue generado en el momento de la creacin del ndice. Si se quiere mantener el valor original, entonces se utiliza el valor 0. WITH NO_INFOMSGS se suprimen los mensajes generados en la ejecucin. No es necesario conocer los nombres de todos los ndices de todas las tablas, ya que si utilizamos la instruccin de la siguiente forma: DBCC RBINDEX (Movimientos, , 0) Se reorganizarn todos los ndices que contengan la tabla Movimientos, conservndose el fillfactor original de cada ndice en particular. Una de las formas de utilizarlo es, escribir un script con una sentencia DBCC RBINDEX por cada tabla que necesitemos reorganizar y agendarlas en forma peridica mediante un trabajo de mantenimiento dentro de algn horario disponible. Por lo tanto, la recomendacin ser: elegir las tablas ms accedidas y/o actualizadas, y reorganizarlas una vez entre semana. Para reorganizar todas las tablas que contengan ndices se utiliza el mismo concepto, pero dentro de un procedimiento que recorra todas la tablas de la base y las reorganice, sin necesidad que escribamos todas la tablas que contiene la base de datos. Estos procedimientos se pueden encontrar en el Forum bajo el nombre de Tips, y la idea es generar un trabajo de mantenimiento que se ejecute, por ejemplo, en el fin de semana
Nota: Siendo nb_usuario el nombre del esquema del usuario para el que queramos validar las estadsticas. (Lanzar con usuario SYS) Para actualizar las estadsticas utilizamos el paquete DBM_STATS. Podemos actualizar las estadsticas de todos los objetos de un esquema de la siguiente forma:
Execute DBMS_STATS.gather_schema_stats(Esquema);
Nota: Sustituimos esquema por el nombre de nuestro esquema a actualizar (lanzar con usuario SYS) Una vez actualizadas las estadsticas de los ndices de la base de datos lanzamos la siguiente consulta:
SELECT index_name, blevel, DECODE(blevel,0,'OK BLEVEL',1,'OK BLEVEL',2, 'OK BLEVEL',3,'OK BLEVEL',4,'OK BLEVEL','BLEVEL HIGH') OK FROM dba_indexes where table_owner='Propietario';
Nota: Sustituimos Propietario por el esquema o propietario que queramos verificar (lanzar con usuario SYS) Con esta sentencia obtendremos el nombre del ndice, el blevel y si es correcto. INDEX_NAME INX_CUENTA INX_TRABAJO INX_DINERO BLEVEL 1 0 OK OK BLEVEL OK BLEVEL BLEVEL HIGH
Los ndices que deberamos de reconstruir son los que en la columna ok aparecen como BLEVEL HIGH. Blevel (branch level) es parte del formato del B-tree del ndice e indica el nmero de veces que ORACLE ha tenido que reducir la bsqueda en ese ndice. Si este valor est por encima de 4 el ndice deber de ser reconstruido.
Nota: En algunos casos cuando alguno de los ndices tiene algn tipo de corrupcin no es posible reconstruirlo. La solucin en este caso es borrar el ndice y recrearlo.
ACTIVIDADES DE PRACTICA (Elaboracion en equipo) Crear bitcoras para el sistema ficticio de la tercera unidad, utilizando las herramientas propias del DBMS. Investigar el proceso de carga batch. Crear datos aleatorios para la BD del sistema ficticio utilizando el proceso anterior. Crear diferentes ndices y medir el rendimiento a la base de datos para cada uno de ellos, usando tcnicas de estimacin del tiempo de respuesta al cliente. Discutir en un ensayo de al menos una cuartilla sobre la implicacin de la creacin de los ndices adicionales y la relacin con el costo de almacenamiento y rendimiento.