Hoy vamos a hablar de las estadísticas de las bases de datos de SharePoint, un tema importante por dos razones, puede afectar al rendimiento de tu granja y puede generar discusiones entre la gente de SharePoint y los administradores de base de datos (DBA).

¿Qué son las estadísticas?

Una explicación simplificada seria que las estadísticas son objetos de SQL Server que contienen métricas de la cantidad de datos y distribución de los mismos en una o varias columnas, y que son usadas por el query optimizer a la hora de evaluar y seleccionar la mejor opción o plan de ejecución la hora de responder a una consulta. Si las estadísticas no están actualizadas puede ocurrir que se opte por un plan de ejecución que no es el óptimo.

¿Cuál es el problema entre los DBAs y la gente de SharePoint?

SQL ofrece varias opciones configurables para las estadísticas, las que nos afectan son las opciones de crear y actualizar estadísticas automáticamente.

Auto Update Statistics- SQL option

El problema viene si le preguntas a un DBA si debes activar estas opciones, seguramente te dirá “por supuesto” ya que tiene sentido mantener actualizas las estadísticas si eso hace que las consultas se resuelvan más rápidamente y eficientemente, o “depende” ya que no todos los escenarios son iguales. Sin embargo si le preguntas a alguien de SharePoint te dirá  «esas opciones tienen que estar desactivadas» para las bases de datos de contenido según la documentación de Microsoft. A priori puede parecer una mala idea, pero todo tiene una explicación. A partir de Service Pack 2 para SharePoint 2007 , se añadió una regla en el Health Analyzer que se encarga de mantener las estadísticas actualizadas.

Databases used by SharePoint have outdated index statistics

Por defecto esa regla está configurada para ejecutarse diariamente a las 00:00h . El funcionamiento es bastante sencillo. Identifica las bases de datos en la granja y comprueba si cada una de ellas contiene el procedimiento almacenado proc_UpdateStatistics. De ser así llamara al procedimiento almacenado, en caso contrario no hace nada.

Problemas que nos podemos encontrar

Hace unas semanas cree aplicación web de pruebas en una granja de SharePoint y empecé a subir grandes cantidades de información. Según iba pasando el tiempo y aumentaba la información, se observaba que el tiempo de respuesta empeoraba. No tenía desarrollos a medida, la red iba correctamente, no se apreciaba nada en los logs, no había fragmentación en los índices de la base de datos….pero las estadísticas no estaban actualizas y no tenía mensajes del Health Analyzer.

Last updated statistics

Si nos fiamos un poco nos daremos cuenta que el job se ejecuta a media noche, que suele ser la ventana que usan muchas empresas para tareas de mantenimiento de las bases de datos, como por ejemplo para realizar los backup, como la que se estaba ejecutando en mi máquina de desarrollo. Al parecer si se tienen ciertas tareas de mantenimiento de la base de datos a la misma hora que el job de actualizar las estadísticas de SharePoint puede darse el caso de que el job comience, pero no realice la tarea y además no de un aviso de error. Gracias al post de MSDN me di cuenta de ese detalle y he añadido una nueva tarea de mantenimiento semanal que es comprobar la fecha de actualización de las estadísticas.

 

Vínculos de interés

informe de Technet.

Configuracion de SQL para SharePoint