Mantenimiento de Índices y Estadísticas

Dirigido a: Administradores de Bases de Datos
Área: Bases de Datos
Autor: Pablo F. Dueñas Campo

Introducción

Dentro del mantenimiento de SQL Server, el de índices y estadísticas ocupa un lugar importante para el rendimiento del servidor. En muchas ocasiones se pregunta qué hay que hacer antes y cómo. La respuesta corta es: depende de qué usemos para el mantenimiento y de la versión de SQL Server. Veamos por qué.

Creacion de datos base de test

En primer lugar vamos a crear una tabla de prueba para ver el comportamiento de las estadísticas cuando se genera un índice o se cambian los datos. Luego la llenamos con datos anchos y generamos unas estadísticas de columna:

Si nos fijamos en las estadísticas asociadas al índice y a la columna, veremos que no están actualizadas aún –bueno, he puesto que no se actualicen automáticamente las estadísticas para que no interfiera con la prueba–. Es decir, como primero hemos creado el índice y la estadística, y luego hemos añadido datos, las estadísticas no se han actualizado al añadir los datos:

Reorganización índices

Si dentro del mantenimiento está el reorganizar un índice, no se actualizan las estadísticas y además nos aparece que el campo del índice y el de la columna tienen 5.000 modificaciones:

Todo esto va de acuerdo con la documentación de SQL Server.

Volver a crear índices

Pasemos a la parte importante: ¿qué pasa cuando volvemos a crear los índices? Para ello vamos a hacer la misma prueba, pero usando la opción REBUILD: el resultado es distinto según la versión de SQL Server que estemos usando. En 2008 hay un «bug» por el que se asume que se han actualizado todas las estadísticas:

Vemos claramente que las estadísticas de la clave primaria se han actualizado, pero no las de la columna. A pesar de esto, internamente nos dice SQL Server que no hay ninguna fila modificada en la columna stDato desde la última vez que se actualizaron las estadísticas, lo que no es cierto.

En SQL Server 2012 el comportamiento está corregido según podemos ver en la imagen siguiente:

Actualizar estadísticas

Si actualizamos las estadísticas y hacemos pruebas borrando filas, cambiándolas, insertando, vamos a ver que el comportamiento es el mismo. También da igual si la estadística se ha creado manualmente o la ha creado el motor de base de datos. Persiste la diferencia entre SQL Server 2008 y 2012. ¿Qué consecuencias tiene esto?

En SQL Server 2008, si se ha reconstruido algún índice, no podemos confiar en esta información para saber si hay que actualizar una estadística o no. Por ejemplo, si usamos el procedimiento del sistema sp_updatestats para actualizar las estadísticas, no va a funcionar:

Comprobamos que el resultado es negativo, no se actualiza nada.

Sin embargo en SQL Server 2012, como está correcta la información interna del motor de base de datos, sí que se actualizan:

Por lo tanto, según la versión y qué tipo de mantenimiento se haga, en SQL Server 2008 puede ser conveniente actualizar primero las estadísticas.

Estadísticas de columna

Por último, de lo anterior vemos que, si hacemos un mantenimiento exhaustivo –por ejemplo el semanal o mensual– que vuelve a crear todos los índices, no es necesario a continuación actualizar todas las estadísticas, sino que basta con las de columna, lo que puede acortar el tiempo:

Conclusión

De acuerdo con las comprobaciones que hemos hecho, si estamos usando SQL Server 2008 (o 2008 R2), según el mantenimiento que se haga, puede ser conveniente actualizar primero las estadísticas para asegurarnos que se hace con las necesarias. En cualquiera de ellas, si dentro de un plan de mantenimiento se vuelven a generar los índices, basta con actualizar las estadísticas de columna.

1 comentario

Dejar un comentario

¿Quieres unirte a la conversación?
¡Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Artículos Relacionados

asLAN LIVE 2020

El día 19 de mayo impartimos seminarios sobre los temas "5G, WiFi, Networks" y "Artificial Intelligence” en asLAN LIVE 2020

14/05/2020

Seguir leyendo  

Revista Aledit Servicios Profesionales Marzo 2020

Desde Aledit, el área de servicios profesionales Danysoft, te invitamos a leer este especial con las últimas soluciones TI en Monitorización, Programación, Automatización de Procesos, Business Int ...

30/03/2020

Seguir leyendo  

Revista Danysoft e Intel Software 2020

Amplia tus conocimientos con la nueva edición coincidiendo con el XI Seminario CAPAP-H y ASLAN 2020. Modernización de código | Inteligencia artificial | Programación paralela | Deep Learning

24/02/2020

Seguir leyendo  

Congreso & Expo ASLAN 2020

Patrocinando el área de IA del Congreso, nos encontrarás en los stands 12 y 13, y en las sesiones de IA, Monitorización de Sistemas, y Automatización de Procesos que impartiremos.

17/02/2020

Seguir leyendo