Desfragmentando índices

Recientemente estuve realizando algunas tareas de optimización de una base de datos SQL Server en un cliente. Una de las problemáticas que se detectaron fue la fragmentación de índices, hecho que penalizaba en el rendimiento de las consultas. Para solventar este problema tuvimos que recurrir a la desfragmentación de los índices, ya sea recreándolos o bien reorganizándolos.

Una explicación fenomenal sobre la fragmentación de índices, y qué es mejor para resolver esta problemática (recrear o reorganizar) la podéis encontrar en el blog El Rincón del DBA, en el artículo Nos gustan las DMVs, gracias al cual aprendí a usar correctamente las DMV (Dynamic Management Views, o lo que es lo mismo, vistas que permiten obtener datos sobre nuestro sistema). De hecho, yo estaba habituado a resolver este tipo de situaciones mediante la sentencia DBCC SHOWCONTIG, pero pasará a ser obsoleta en próximas versiones de SQL Server, con lo que ya os podéis ir acostumbrando a usar las DMVs.
En el artículo mencionado también se presenta un script para detectar los índices mayormente fragmentados, e incluso la sentencia de T-SQL recomendada que debería ejecutarse para solventar esa fragmentación. En mi caso, adapté ese script (¡ muchas gracias por publicarlo, Enrique !) para recorrer únicamente los índices de una sola base de datos, y ejecutar la sentencia recomendada. Ese script lo incluí en un procedimiento almacenado, que acepta como parámetro el nombre de la base de datos a tratar, de forma que se puede programar su ejecución con cierta periodicidad.

El script para crear el procedimiento almacenado os lo podéis bajar de este vínculo: ADMIN_Mantenimiento_Indices.sql (3,32 kb)

Ya para acabar, comentaros que en nuestro caso dejamos los índices con un factor de relleno de un 90%, ya que en nuestra base de datos también se realizan con frecuencia operaciones de inserción y actualización (con un factor de relleno de un 100% rellenaríamos todas las páginas, con lo que optimizaríamos el espacio ocupado, pero penalizaríamos las operaciones de inserción y/o actualización, aparte de generar nuevas fragmentaciones rápidamente).

¡Espero que les sirva! 

 

Tags: , , ,