4.1 Archivos log del SGBD
Todas las bases
de datos de SQL Server
tienen un registro
de transacciones que registra todas
las transacciones y las modificaciones que cada transacción realiza en la base de datos. El registro de transacciones es un componente esencial de la base de datos.
Si hay un error del sistema, ese registro será
necesario para devolver la base de datos a un estado coherente. El registro de transacciones se debe truncar periódicamente para evitar que se llene.
El registro
de transacciones permite
las siguientes operaciones:
- Recuperación de transacciones individuales.
- Recuperación de todas las transacciones incompletas cuando se inicia SQL Server
- Puesta al día de una base de datos, un archivo, un grupo de archivos o una página restaurados hasta el momento exacto del error.
- Permitir replicación transaccional.
- Compatibilidad con soluciones de alta disponibilidad y recuperación ante desastres: Grupos de disponibilidad AlwaysOn, creación de reflejo de la base de datos y trasvase de registros.
valor log_reuse_wait |
valor log_reuse_wait_desc |
Descripción |
0 |
NOTHING |
Hay
actualmente uno o más archivos de registro virtual
reutilizables. |
1 |
CHECKPOINT |
No se ha producido ningún
punto de comprobación desde el último
truncamiento o el encabezado del
registro no se ha movido
más allá de un archivo
de registro virtual. (Todos los modelos
de recuperación) Este es un motivo
habitual para retrasar el truncamiento. |
2 |
LOG_BACKUP |
Se requiere una copia de
seguridad del registro para que se pueda
truncar el registro de transacciones. (Solo
modelos de recuperación completa u optimizada para cargas masivas de registros) Cuando se completa la siguiente copia de seguridad de registros, es posible que se pueda
reutilizar parte del espacio de registro. |
Cuando trabajas frente al ordenador, navegas en tu tablet u
operas una página web desde un
servidor, tienen lugar numerosos procesos que pasan inadvertidos ante cualquier usuario. En caso de que se
presenten problemas, se produzcan errores o quieras conocer
exactamente qué acciones
ejecutan los sistemas
operativos o los diferentes programas o servicios, puedes acceder a los
llamados archivos log, en español
ficheros de registro. Estos “logs” son gestionados por prácticamente todas las aplicaciones, servidores, bases de datos
y sistemas de manera automática y permiten controlar (de forma centralizada) todos los procesos
relevantes.
En general, los ficheros log no suelen evaluarse frecuentemente, pues cumplen una función similar a la de un registrador de vuelo que es inspeccionado solo en caso de emergencia. Como consecuencia del registro detallado de datos de los logs, estos son una fuente primordial a la hora de analizar errores de programa o del sistema, así como para determinar el comportamiento de los usuarios. Esto no solo resulta interesante para los fabricantes de software, sino también para propietarios de páginas web, quienes pueden acceder a información interesante desde los archivos de registro del servidor web.
4.2 definición de los modos de operación de un SGBD. (alta, baja, recovery) y comandos de activación)
El sistema de gestión de bases de datos es esencial para el adecuado
funcionamiento y manipulación de los datos contenidos en la base. Se
puede definir como: "El Conjunto
de programas, procedimientos, lenguajes, etc. que suministra, tanto a los usuarios no informáticos como a los analistas, programadores o al administrador, los
medios necesarios para describir, recuperar
y manipular los datos almacenados en la base, manteniendo su integridad, confidencialidad y seguridad".
Las funciones esenciales de un SGDB son la descripción, manipulación y utilización de los datos.
Descripción: Incluye la descripción de: Los elementos
de datos, su estructura, sus interrelaciones, sus validaciones. Tanto a nivel externo como lógico global e interno esta descripción es realizada
mediante un LDD o Lenguaje de Descripción de Datos.
Manipulación: Permite: Buscar, Añadir, Suprimir y Modificar
los datos contenidos en la Base de Datos.
La manipulación misma supone: Definir un criterio de selección, Definir la estructura lógica a recuperar, Acceder a la estructura física. Esta manipulación es realizada mediante un LMD o Lenguaje de Manipulación de Datos.
Utilización: La utilización permite acceder a la base de datos, no a nivel de datos sino a la base como tal, para lo cual: Reúne las interfaces de los usuarios y suministra procedimientos para el administrador.
En términos ideales, un DBMS debe contar con estas funciones, sin embargo, no todos las poseen, así existen algunos manejadores que no cumplen la función de respaldo o de seguridad, dejándola al usuario o administrador; sin embargo un DBMS que sea completo y que deba manejar una base de datos multiusuario grande, es conveniente que cuente con todas estas operaciones.
La vida de todo archivo comienza cuando se crea y acaba cuando se borra. Durante su existencia es objeto de constante procesamiento, que con mucha frecuencia incluye acciones de consulta o búsqueda y de actualización. En el caso de la estructura archivos, entenderemos como actualización, además de las operaciones, vistas para vectores y listas enlazadas, de introducir nuevos datos (altas) o de eliminar alguno existente (bajas), la modificación de datos ya existentes, (operación muy común con datos almacenados). En esencia, es la puesta al día de los datos del archivo.
Altas
La operación de dar de alta un determinado registro es similar a la de
añadir datos a un archivo. Es
importante remarcar que en un archivo secuencial sólo permite añadir datos al final del mismo. En otro
caso, si se quiere insertar un registro en medio
de los ya presentes en el archivo, sería necesaria la creación nueva del archivo.
Bajas
Existen dos métodos para dar de baja a un registro en un archivo
secuencial, donde no es fácil
eliminar un registro situado en el interior de una secuencia: Para ello podemos
seguir dos métodos:
1) Utilizar y por tanto crear un segundo archivo
auxiliar transitorio, también
secuencial, copia del que se trata de actualizar. Se lee el archivo
completo registro a registro y en
función de su lectura se decide si el registro se debe dar de baja o no. En caso afirmativo, se omite la
escritura en el archivo auxiliar. Si el registro no se va a dar de baja, este registro se reescribe en el archivo
auxiliar
Tras terminar la lectura del archivo original, se tendrán dos archivos:
original (o maestro) y auxiliar. El
proceso de bajas del archivo concluye borrando el archivo original
y cambiando el nombre del archivo auxiliar
por el del inicial.
2) Guardar
o señalar los registros que se desean dar de baja con un indicador o bandera que se guarda en un array; de esta
forma los registros no son borrados físicamente, sino que son considerados como inexistentes.
Inevitablemente, cada cierto tiempo, habrá que crear un nuevo
archivo secuencial con el mismo nombre, en el que los registros
marcados no se grabarán.
Backup y Recuperación
Como administrador de copia de seguridad, la tarea principal
es diseñar, implementar y gestionar una estrategia de
backup y recuperación. En general, el propósito
de una estrategia de recuperación de copia de seguridad y es para proteger la base de datos contra la
pérdida de datos y reconstruir la base de datos después de la pérdida de datos.
Oracle Backup y Recuperación de Soluciones
Al implementar una estrategia de backup y recuperación, dispone de las siguientes soluciones disponibles:
·
Administrador de Recuperación (RMAN)
Recovery Manager está completamente integrado con la base
de datos Oracle para llevar a cabo
una serie de actividades de copia de seguridad y recuperación, incluyendo el mantenimiento de un repositorio de RMAN de datos históricos acerca de las copias de seguridad. Se puede acceder a RMAN
través de la línea de comandos oa través de Oracle Enterprise Manager.
·
Copia de Seguridad y Recuperación Gestionadas por el Usuario
En esta solución, realizar copias de seguridad y
recuperación con una mezcla de comandos del sistema
operativo host y SQL * Plus.
Recuperación de Comandos
Ustedes son responsables de determinar todos los aspectos
de cuándo y cómo las copias de seguridad y la recuperación se hacen.
Estas soluciones están respaldadas por Oracle y se documentan, pero RMAN es la
mejor solución para copia de seguridad y recuperación de bases de datos. RMAN proporciona una interfaz común para
las tareas de copia de seguridad a través
de diferentes sistemas operativos host, y ofrece varias técnicas de copia de seguridad
que no están disponibles a través de métodos administrados por usuarios.
La mayor parte de este manual se centra en la copia de
seguridad y recuperación de RMAN
basado. Técnicas de copia de seguridad y recuperación gestionadas por el usuario
se tratan en Realización de usuario-Managed Backup and Recovery. Las más
destacables son los siguientes:
·
Copias de Seguridades Incrementales
Una copia de seguridad incremental almacena sólo los
bloques modificados desde la última
copia de seguridad. Por lo tanto, proporcionan copias de seguridad más compacta
y una recuperación más rápida, lo que reduce la necesidad de aplicar de rehacer en archivo de datos de recuperación de los medios de comunicación. Si se habilita el seguimiento de cambios de bloque, entonces
usted puede mejorar el rendimiento al evitar escaneos
completos de todos
los archivos de datos de
entrada. Utilice el comando
Copia de seguridad incremental para
realizar copias de seguridad incrementales.
·
Bloquear los Medios de Recuperación
Usted puede reparar un archivo de datos con sólo un pequeño
número de bloques de datos corruptos
sin tomarlo fuera de línea o la restauración desde copia de seguridad. Utilice el comando BLOQUE
RECOVER para realizar la recuperación del bloque de
comunicación.
·
Compresión Binaria
Un mecanismo de compresión binaria integrado en base de
datos Oracle reduce el tamaño de las copias de seguridad.
·
Copias de Seguridad Encriptadas
RMAN utiliza las capacidades de cifrado de copia de
seguridad integrados en bases de
datos Oracle para almacenar conjuntos de copia de seguridad en un formato codificado. Para crear copias de
seguridad cifradas en el disco, la base de datos debe utilizar la opción de seguridad avanzada.
Para crear copias de seguridad
encriptadas directamente en cinta, RMAN debe utilizar la copia de seguridad de Oracle Secure interfaz SBT,
pero no requiere la opción de seguridad avanzada.
·
Duplicación de la Base de Datos Automatizada
Crea fácilmente una copia de su base de datos, el apoyo a diversas
configuraciones de almacenamiento, incluida la duplicación directa entre
las bases de datos de ASM.
·
Conversión de Datos entre Plataformas
Ya sea que utilice RMAN o métodos
administrados por usuarios,
puede complementar las copias
de seguridad físicas con copias de seguridad lógicas de objetos de esquema realizados
con la utilidad Export Data Pump. Más tarde, puede utilizar Data Pump Import para volver a crear los datos
después de la restauración y la
recuperación. Copias de seguridad lógicas son en su mayoría más allá del alcance de la copia de seguridad
y de recuperación de documentación.
COMANDOS DE ACTIVACIÓN
Los índices son "estructuras" alternativa a la organización de los datos en una tabla. El propósito de los índices es acelerar el acceso a los datos mediante operaciones físicas más rápidas y efectivas. Para entender mejor la importancia de un índice pongamos un ejemplo; imagínate que tienes delante las páginas amarillas, y deseas buscar el teléfono de Manuel Salazar que vive en Alicante. Lo que harás será buscar en ese pesado libro la población Alicante, y guiándote por la cabecera de las páginas buscarás los apellidos que empiezan por S de Salazar. De esa forma localizarás más rápido el apellido Salazar. Pues bien, enhorabuena, has estado usando un índice.
Para ser uso de los diferentes comandos para un modo de operación debemos estar como administrador o asuma un rol que incluya el perfil de derechos Service Management.
Comando STARTUP
Para el arranque de una base de datos hay tres fases de arranque, para realizar estas fases podemos utilizar startup más un comando, las tres fases son las siguientes:
Fase de no Montaje: se leen los parámetros del sistema, se inician las estructuras de memoria y los procesos de segundo plano. La instancia se arranca sin asociarla a la base de datos. Normalmente se utiliza cuando se modifica o se necesita crear el archivo de control:
startup nomount ;
Fase de Montaje: se asocia la instancia con la base de datos. Se usa el archivo de parámetros para localizar los archivos de control, que contienen el nombre de los archivos de datos y los registros rehacer. Los archivos de datos y los registros de rehacer no están abiertos, así que no son accesibles por usuarios finales para tareas normales. Para realizar esta fase se pueden utilizar dos comandos:
- startup mount;
- alter database mount;
Fase de Apertura: se abren los archivos de datos y los registros rehacer. La base de datos queda disponible para las operaciones normales. Es necesario que existan registros rehacer de lo contrario si no hay registros usamos el comando resetlogs, que crea registros nuevos. Para esta fase se pueden usar dos comandos:
- startup open;
- alter database open;
Si es necesario utilizar resetlogs:
startup open resetlogs;
alter database open resetlogs;
startup restrict (sólo permite la conexión de usuarios con el privilegio restricted sesion).
startup force (hace shutdown abort y arranca la BD).
Comando SHUTDOWN
El comando SHUTDOWN lo utilizamos parar una base de datos la cual consiste en varias cláusulas.
Shutdown Normal: Este es el valor por defecto, durante el proceso de parada no admite nuevas conexiones y espera que las conexiones actuales finalicen. En el próximo arranque la base datos no requiere procedimientos de recuperación.
Shutdown Immediate: Se produce una parada inmediata de la base de datos, durante el proceso de parada no permite nuevas conexiones y las actuales la desconecta, las transacciones que no estén commit se hara roolback de ellas. En el próximo arranque la base datos no requiere procedimientos de recuperación.
Shutdown Transactional: Se produce una parada hasta que hayan terminado las transacciones activas, no admite nuevas conexiones y tampoco nuevas transacciones, una vez que las transacciones activas van terminando va desconectando a los usuarios. En el próximo arranque la base datos no requiere procedimientos de recuperación.
Shutdown Abort: Aborta todos los procesos de una base de datos, durante el proceso de parada no permite nuevas conexiones y las actuales la desconecta, las transacciones que no estén commit se hará roolback de ellas. En el próximo arranque la base datos puede requerir procedimientos de recuperación.
Comando Describe
Este comando permite conocer la estructura de una tabla, las columnas que la forman y su tipo y restricciones.
DESCRIBE f1;
Comando SHOW TABLES y SHOW CREATE
TABLE
El comando SHOW TABLES muestra las tablas dentro de una base de datos y SHOW CREATE TABLES muestra la estructura de creación de la tabla.
Modificación
Para realizar una modificación utilizamos el comando ALTER TABLE. Para usar ALTER TABLE, necesita permisos ALTER, INSERT y CREATE para la tabla.
4.3 índices, reorganización y reconstrucción
El índice de una base de datos es una estructura
alternativa de los datos en una tabla.
El propósito de los índices es acelerar el acceso a los datos mediante operaciones físicas más rápidas y
efectivas. En pocas palabras, se mejoran las
operaciones gracias a un aumento de la velocidad, permitiendo un rápido
acceso a los registros de una tabla
en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre
los cuáles se hacen búsquedas frecuentes.
Tipos de Índices
Resumen de Índices
Si una tabla de montón organizado no tiene índices,
entonces la base de datos debe
realizar un escaneo completo de tabla para encontrar un valor. Por ejemplo, sin un índice, una consulta de ubicación
2700 en la tabla hr.departments requiere la
base de datos para buscar todas las filas de cada bloque de la tabla para este valor. Este
enfoque no escala bien como datos de aumento
de volúmenes.
Por analogía, supongamos que un gerente de Recursos Humanos
tiene un estante de cajas de cartón.
Las carpetas que contienen información de los empleados
se
insertan aleatoriamente en las cajas. La carpeta de
empleado Whalen (ID 200) es de 10
carpetas desde el fondo de la caja 1, mientras que la carpeta para el rey (ID 100) se encuentra en la parte inferior del
cuadro 3. Para localizar una carpeta, el gestor
busca en cada carpeta en la casilla 1 de abajo hacia arriba, y luego se mueve de una casilla a otra hasta que se
encuentra la carpeta. Para acelerar el acceso,
el administrador puede crear un índice que enumera de forma secuencial todos los
ID de empleado con su ubicación de la
carpeta:
ID 100: Box 3, position
1 (bottom)
ID 101:
Box 7, position 8
ID 200: Box 1, position 10
Del mismo modo, el administrador podría crear índices
separados para los últimos nombres de los empleados, los ID de departamento, y así sucesivamente. En general, considerar la creación de un índice en una columna
en cualquiera de las siguientes situaciones:
·
Las columnas indizadas se consultan
con frecuencia y devuelven un pequeño porcentaje del número total de filas en la
tabla.
·
Existe una restricción de integridad referencial en la columna
o columnas indexadas. El
índice es un medio para evitar un bloqueo de tabla completa que de otro modo se requeriría si se actualiza la clave
principal de la tabla principal, se funden
en la tabla principal, o eliminar de la
tabla primaria.
·
Una restricción de clave única se coloca sobre la mesa y desea especificar
manualmente el índice de todas las opciones sobre
índices.
Características de Indexación
Los índices son objetos de esquema que son lógica y
físicamente independiente de los
datos de los objetos con los que están asociados. Por lo tanto, un índice se puede quitar
o creado sin afectar físicamente a la tabla para el índice.
Nota: Si se le cae un índice, las aplicaciones siguen funcionando. Sin
embargo, el acceso de los datos
previamente indexado puede
ser más lento.
La ausencia o presencia de un índice no requiere un cambio
en el texto de cualquier sentencia
SQL. Un índice es una ruta de acceso rápido a una sola fila de datos. Sólo afecta a la velocidad de ejecución. Dado un valor de datos que se ha
indexado, el índice apunta directamente a la ubicación de
las filas que contienen ese valor.
La base de datos mantiene automáticamente y utiliza los
índices después de su creación. La
base de datos también refleja automáticamente los cambios en los datos, como agregar, actualizar y eliminar
filas, en todos los índices pertinentes sin
acciones adicionales requeridas por los usuarios. Rendimiento de
recuperación de datos indexados
permanece casi constante, incluso cuando se insertan filas. Sin embargo, la presencia de muchos índices en
una tabla degrada el rendimiento DML porque
la base de datos también debe actualizar los índices.
Los índices
tienen las siguientes propiedades:
·
Facilidad de Uso
Los índices son utilizables (por defecto) o inutilizable.
Un índice inutilizables no se mantiene
por las operaciones DML y es ignorado por el optimizador. Un índice inutilizable puede mejorar el rendimiento
de las cargas a granel. En lugar de dejar un
índice y luego volverlo a crear, puede hacer que el índice inservible y luego reconstruirlo. Índices inutilizables y las
particiones de índice no consumen espacio. Cuando
usted hace un índice utilizable no utilizable, la base de datos cae su segmento de índice.
·
Visibilidad
Los índices son visibles (por defecto) o invisible. Un
índice invisible se mantiene por las operaciones DML y no se utiliza
de forma predeterminada por el optimizador. Cómo hacer una invisible índice es una alternativa a lo que es inutilizable o se caiga. Índices
invisibles son especialmente útiles para probar la eliminación de un índice antes de dejarlo caer o mediante
índices temporalmente sin afectar
a la aplicación general.
Guía del Administrador para Aprender a Manejar los Índices
·
Base de datos Oracle
Performance Tuning Guide
para aprender cómo ajustar
los índices
Teclas y Columnas
Una clave es un conjunto
de columnas o expresiones en las que se puede construir un índice. Aunque los términos
se usan indistintamente, los índices y las claves
son diferentes. Los índices son estructuras almacenados en la base de datos que los usuarios a administrar el
uso de sentencias de SQL. Las claves son estrictamente
un concepto lógico.
La siguiente sentencia crea un índice en la columna
customer_id de la muestra oe.orders tabla:
CREATE INDEX ord_customer_ix ON orders (customer_id);
En la declaración anterior, la columna customer_id es la
clave de índice. El índice en sí se llama
ord_customer_ix.
Índices Compuestos
Un índice compuesto, también llamado índice concatenado, es
un índice de varias columnas de una tabla. Las columnas
de un índice compuesto que deben aparecer en el orden que tenga más sentido
para las consultas que recuperar datos y no necesita ser adyacente en la tabla.
Los índices compuestos pueden acelerar la recuperación de datos para las instrucciones SELECT en la que el DONDE referencias cláusula totalidad o la parte principal de las columnas en el
índice compuesto. Por lo tanto, el orden de las
columnas utilizadas en la definición es importante. En general, las columnas de acceso
más común van primero.
Por ejemplo, supongamos que una aplicación realiza consultas frecuentes a apellidos, job_id, y
columnas de salario en la tabla empleados. También asumir que last_name tiene alta cardinalidad, lo
que significa que el número de valores distintos
que es grande en comparación con el número de filas de la tabla. Se crea un índice
con el siguiente orden de las columnas:
CREATE INDEX employees_ix
ON employees (last_name, job_id, salary);
Las consultas que acceden a las tres columnas, sólo la
columna last_name, o sólo el
last_name y columnas job_id utilizan este índice. En este ejemplo, las
consultas que no tienen acceso a
la columna last_name no utilizan el índice.
Nota: En algunos casos, tales como cuando la columna principal tiene muy baja cardinalidad, la base de datos puede
utilizar una búsqueda selectiva de
este índice.
Múltiples índices pueden existir para la misma mesa, siempre
y cuando la permutación
de columnas difiere para cada índice. Puede crear varios índices que utilizan las mismas columnas si se
especifica claramente diferentes permutaciones
de las columnas. Por ejemplo,
las siguientes sentencias SQL especifican permutaciones válidas:
Índices Únicos y no Únicos
Los índices pueden ser únicos o no únicos. Índices únicos
garantizar que no hay dos filas de
una tabla tienen valores duplicados en la columna de clave o columna. Por ejemplo, dos empleados no pueden
tener el mismo ID de empleado. Por lo tanto,
en un índice único, existe una ROWID para cada valor de datos. Los datos de los
bloques de hojas se ordenan sólo por
clave.
Índices no únicas permiten valores
duplicados en la columna o columnas indexadas. Por ejemplo, la columna 'nombre
de la tabla de empleados puede contener
varios valores Mike. Para un índice no único, el ROWID se incluye en la clave de forma ordenada, por lo que los
índices no únicos se ordenan por la clave de índice y ROWID (ascendente).
Oracle Database no filas de la tabla de índice en el que
todas las columnas clave son nulas, a
excepción de los índices de mapa de bits o cuando el valor de la columna
clave de clúster es nulo.
Tipos de Índices
Base de Datos Oracle ofrece varias combinaciones de indexación, que proporcionan
una funcionalidad complementaria sobre el rendimiento. Los índices se pueden clasificar de la siguiente
manera:
·
Los Índices de Árbol B
Estos índices son el tipo de índice estándar. Son
excelentes para la clave principal y
los índices altamente selectivos. Utilizado como índices concatenados, B-tree índice pueden recuperar los datos
ordenados por las columnas de índice. Índices
B-tree tienen los siguientes subtipos:
·
Índice de Tablas Organizadas
Una tabla de índice-organizada difiere de un
montón-organizado porque los datos es en sí mismo el índice.
En este tipo de índice,
los bytes de la clave de índice
se invierten, por ejemplo, 103 se almacena como 301. La inversión de
bytes extiende inserta en el índice durante muchos bloques.
·
Índices Descendentes
Este tipo de índice almacena los datos en una columna o
columnas de concreto en orden descendente.
·
Índices B-Tree de Racimo
Este tipo de índice se utiliza para indexar una clave de
clúster tabla. En lugar de apuntar a
una fila, los puntos clave para el bloque que contiene filas relacionadas con la
clave de clúster.
·
Mapa de Bits y los Índices
Bitmap Join
En un índice de mapa de bits, una entrada de índice utiliza
un mapa de bits para que apunte a
varias filas. En cambio, los puntos de entrada de un índice B-tree en una sola fila. Un índice de combinación de
mapa de bits es un índice de mapa de bits para la unión de
dos o más tablas. Consulte "Indicadores
de mapa de bits".
·
Índices Basados en Funciones
Este tipo de índice incluye columnas que, o bien se
transforman por una función, tales
como la función UPPER, o incluidos en una expresión. Índices B-tree o mapa de bits
puede ser basado en las funciones.
·
Índices de Dominio de Aplicación
Este tipo de índice se crea por un usuario para los datos
en un dominio específico de la
aplicación. El índice físico no tiene que utilizar una estructura de índice tradicional y se puede almacenar ya sea en
la base de datos Oracle como tablas o externamente como un archivo.
Consulte "Indicadores de dominio de aplicación".
·
Índices B-Tree
Árboles B, abreviatura de árboles balanceados, son el tipo más común de índice de base de datos. Un índice B-tree es una
lista ordenada de valores dividida en rangos.
Mediante la asociación de una tecla con una fila o rango de filas, los árboles B proporcionan un excelente
rendimiento de la recuperación para una amplia
gama de consultas, incluyendo coincidencia exacta y búsquedas por rango. La figura 3-1 ilustra la estructura de un
índice B-tree. El ejemplo muestra un índice en
la columna department_id, que es una columna de clave externa en la tabla empleados.
Reorganización de Índices.
Un factor clave para conseguir una E/S de disco mínima para
todas las consultas de bases de datos es
asegurarse de que se creen y
se mantengan buenos índices. Una vez creados
los índices, se debe procurar
mantenerlos para asegurarse que sigan trabajando en forma
óptima. A medida que se agregan, modifican
o borran datos se produce fragmentación. Esta fragmentación puede ser buena o mala para el rendimiento del sistema, dependiendo
de las necesidades del trabajo de la base de datos.
Fragmentación de los
Índices
La fragmentación es consecuencia de los procesos de
modificación de los datos (instrucciones INSERT,
UPDATE y DELETE)
efectuados en la tabla y
en los índices definidos en la tabla. Como dichas modificaciones no suelen estar distribuidas
de forma equilibrada entre las filas de la tabla y los índices, el llenado de cada página puede variar con el paso
del tiempo. Para las consultas que recorren
parcial o totalmente los índices de una tabla, este tipo de fragmentación puede producir lecturas de páginas adicionales.
Esto impide el recorrido paralelo de los datos. Existen dos tipos de fragmentación:
Interna:
Fragmentación dentro de páginas individuales de datos
e índices con espacios libres que
generan la necesidad de más operaciones de E/S y más memoria para su lectura. Este hecho disminuye el rendimiento en
ambientes de lectura, pero en algunos
casos puede beneficiar las inserciones, que no requieren una división de páginas
con tanta frecuencia.
Externa:
Cuando el orden lógico de las páginas no es correcto,
porque las páginas no son contiguas.
El acceso a los datos es mucho más lento por la necesidad de búsqueda
de los datos.
La fragmentación de índices se puede reparar
reorganizando un índice o reconstruyéndolo. Para los índices
fraccionados que fueron construidos en una estructura
partida se puede usar cualquiera de estos métodos o bien en un índice completo o bien en un único fragmento del índice.
Detección de Fragmentación
El primer paso
para decidir qué método de desfragmentación se va a utilizar consiste en analizar el índice para
determinar el nivel de fragmentación. Si se usa la función del sistema sys.dm_db_index_physical_stats, se puede detectar
la fragmentación de los índices
de la base de datos thuban-homologada.
SELECT DISTINCT
A.INDEX_ID 'IDIndice';
sys.TABLES.name 'Tabla', b.name
'Indice',
avg_fragmentation_in_percentr '% Fragmentación', fragment_count 'Cantidad de Fragmentos',
avg_fragment_size_in_pages 'Promedio de fragmentos por página', FROM
sys.dm_db_index_physical_stats ( DB_ID
()N'thuban-himologada'), OBJECT_ID (N'dbo.*'),
NULL, NULL,
NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id,
sys.TABLES WHERE
ORDER BY
avg_fragmentation_in_percent DESC
La grilla
de resultados emitida
por la anterior sentencia incluye
las siguientes columnas:
Columna |
Descripción |
Id Índice |
El número de índice dentro
de la tabla. |
Tabla |
Nombre de la tabla
a la que corresponde el índice. |
Índice |
Nombre del índice. |
% Fragmentación |
El porcentaje de fragmentación lógica (páginas del índice
fuera de orden). |
Cantidad de fragmentos |
La cantidad de fragmentos (páginas físicas consecutivas) en el índice. |
Promedio de páginas por
fragmentos |
Promedio de número de páginas en un
fragment del índice. |
Una vez que se toma conciencia del nivel de fragmentación, se debe utilizar la tabla a continuación para determinar el mejor método para su corrección.
% Fragmentación |
Sentencia correctiva |
> 5% and < = 30% |
ALTER INDEX REORGANIZE |
> 30% |
ALTER INDEX REBUILD WITH (ONLINE = ON)* |
La reconstrucción del índice puede ejecutarse tanto en
línea como fuera de línea. La
reorganización de los índices debe ejecutarse siempre en línea. Para adquirir una disponibilidad similar a la de la opción de reorganización, los
índices deben ser reconstruidos en línea.
Estos valores proveen una estricta guía para determinar el
punto en el que se debe cambiar
de ALTER INDEX REORGANIZE a ALTER
INDEX REBUILD.
Los niveles muy bajos de fragmentación (menores que el 5
por ciento) no deben ser corregidos
por ninguno de estos comandos porque el beneficio de la remoción de una cantidad
tan pequeña de fragmentación es casi siempre
superado ampliamente por el costo de reorganización o reconstrucción de índices.
Reorganización de Índices
Para reorganizar uno o más índices se debe usar la
sentencia ALTER INDEX con la cláusula REORGANIZE. Por ejemplo:
ALTER INDEX PK_LOGS ON THUBAN_LOGS REORGANIZE
El
proceso de reorganización de índices
se realiza siempre
en línea y el consumo
de recursos es bajo por lo que no mantiene
bloqueos por mucho tiempo.
Reconstrucción de Índices
Es importante periódicamente examinar y determinar qué índices son susceptibles de ser reconstruidos. Cuando un índice
está descompensado puede ser porque algunas
partes de éste han sido accedidas con mayor frecuencia que otras. Como resultado de este suceso podemos obtener
problemas de contención de disco o cuellos
de botella en el sistema. Normalmente reconstruimos un índice con el comando ALTER INDEX.
Es
importante tener actualizadas las estadísticas de la base de datos. Para saber si las estadísticas se están lanzando
correctamente podemos hacer una consulta sobre la tabla dba_indexes y ver el campo last_analyzed para observar cuando
se ejecutaron sobre ese índice las estadísticas.
Blevel (branch level) es parte del formato del B-tree del índice e indica el número de veces que Oracle ha tenido que
reducir la búsqueda en ese índice. Si este valor
está por encima de 4 el índice deberá de ser reconstruido.
ALTER INDEX <index_name> REBUILD;
Para reconstruir una partición de un índice podríamos
hacer los siguiente: ALTER INDEX <index_name> REBUILD
PARTITION <nb_partition>
NOLOGGING;
Nota: En algunos
casos cuando alguno de los índices tiene algún tipo de corrupción no es posible reconstruirlo. La solución en este caso es borrar el
índice y recrearlo.
No hay comentarios:
Publicar un comentario