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
sys.TABLES.object_id
= b.object_id
ORDER BY
avg_fragmentation_in_percent
DESC
La grilla de
resultados emitida por la anterior sentencia incluye las siguientes columnas:
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.
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.
Comentarios
Publicar un comentario