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.

Sigue descubriendo

3 comentarios

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

Congreso & Expo ASLAN 2024

Si tu actividad se desarrolla en tecnologías como la programación, Inteligencia Artificial o HPC y quieres conocer las últimas novedades que pueden hacer por tu organización fabricantes como Intel Software nos vemos ...199321

15/01/2024

Seguir leyendo  

erwin Data Modeling

CA ERwin Data Modeling te proporciona un entorno de colaboración de modelado de datos para gestionar datos empresariales a través de una interfaz intuitiva y gráfica.22476

24/06/2023

Seguir leyendo  

MindManager

La creación de mapas mentales más fácil que nunca. Avive el trabajo en equipo, mejore la productividad y genere resultados corporativos más rápido.109384

19/06/2023

Seguir leyendo  

Congreso & Expo ASLAN 2023

Patrocinando el área de IA del Congreso. Con presencia en el Stand 16 y en el Speaker Corner de Innovation Area: "Intelligent Networks", Danysoft y Aledit  te ofrecen la oportunidad de conocer las últimas soluciones ...193940

13/03/2023

Seguir leyendo