Por Daniel Torres, Revisado por: Roberto Cavalcanti

Una de las grandes bondades de Microsoft SQL Server es el hecho de interactuar con varios de los productos que Microsoft ofrece en el mercado y esta es una de las razones por la cual colaboramos con diversos equipos de escalación como SharePoint, .Net, FIM (Forefront Identity Manager), SCOM (System Center Operations Manager), Dynamics, Windows, entre otros.

Del total de casos que trabajamos en conjunto con el equipo de Sharepoint la mayoría está relacionado con problemas de rendimiento en la capa de SQL Server, si bien las tareas de mantenimiento son obligatorias muy pocos administradores de bases de datos las llevan a la práctica y peor aún, el método y aplicación se mantiene homologado en todas las instancias no importando el propósito o el producto con el cual interactúan; desafortunadamente este es el caso de SharePoint 2010 y es frecuente ver sistemas críticos para la operación de las compañías que trabajan con índices altamente fragmentados, estadísticas desactualizadas y problemas de integridad de información, el resultado es un pésimo rendimiento de la aplicación, errores de timeout y bloqueos.

Esta ocasión trataré en específico el tema correspondiente para la versión 2010 de SharePoint. Como tareas básicas para tener un ambiente en buen estado se proponen las siguientes actividades:

  • Verificar la integridad de la bases de datos.
  • Desfragmentar índices, ya sea reorganizándolos o reconstruyéndolos.
  • Elegir un fill factor adecuado para los índices.

Verificar problemas de errores de consistencia utilizando el DBCC CHECKDB.

El mejor lugar para comenzar una rutina de mantenimiento es evaluando la integridad de las bases de datos. Las bases de datos se pueden corromper por un mal funcionamiento del subsistema de discos, fallas de energía en los equipos que soportan el storage y/o servidores de bases de datos, un incorrecto apagado del equipo donde se encuentra instalado el SQL Server, etc. Una vez que valide que su base de datos es consistente puede proseguir con el plan de mantenimiento. Debido a la gran demanda de recursos de I/O, procesamiento, memoria y espacio en la TEMPDB es necesario ejecutar esta tarea en horarios no productivos de su aplicación, si sus bases de datos son de gran tamaño y el tiempo del que dispone para realizar el mantenimiento es corto por favor revise el siguiente documento para conocer las opciones disponibles para reducir el tiempo de ejecución del DBCC CHECKDB:

http://msdn.microsoft.com/en-us/library/ms176064.aspx

Defragmentación de índices.

Lo más importante es que usted mida los niveles de fragmentación de sus índices. Una pregunta común que nos hacen nuestros clientes es ¿Cada cuándo debo desfragmentar los índices?, la respuesta es: depende. Entre mayor cantidad de operaciones de actualización, inserción y borrado se realicen sobre una tabla mayor será la fragmentación interna y externa del índice, como resultado tendremos páginas de datos con pocos registros, índices que ocupan un gran espacio y una mayor cantidad de niveles intermedios entre el nodo raíz y el nodo hoja del árbol binario que conforma el índice. Si usted mide la fragmentación de los índices podrá ejecutar su plan de mantenimiento incluso de forma diaria y reorganizar solo aquellos que lo necesitan. Una buena alternativa para medir la fragmentación es utilizando la vista dinámica sys.dm_db_index_physical_stats.

Para reducir la fragmentación para una base de datos completa SharePoint 2010, a diferencia de sus antecesores, ofrece una nueva herramienta llamada Health Analyzer. Esta nueva característica contiene una serie de reglas que permiten monitorear el estado del ambiente de SharePoint 2010 y en algunos casos tomar acciones para resolver problemas. Para algunas de las bases de datos existen reglas que permiten reducir automáticamente la fragmentación, validar la vigencia de las estadísticas y actualizarlas si es necesario. Para conocer más sobre el Heatlh Analyzer consulte el siguiente recurso:

http://msdn.microsoft.com/en-us/library/ee534957.aspx

Para reducir la fragmentación en una tabla e índice en específico deberá considerar los diferentes niveles de fragmentación que propone SharePoint así como el método que se debe seguir para corregirlo

Fragmentation level

Defragmentation method

Up to 10%

Reorganize (online)

10-75%

Rebuild (online)

75%

Rebuild (offline)

Es importante indicar que las operaciones DROP INDEX y CREATE INDEX no están soportadas por SharePoint 2010 en sus bases de datos, tampoco está permitido agregar nuevos índices a las tablas. La instrucción que deberá utilizar para reducir la fragmentación es ALTER INDEX, revise el siguiente vínculo para conocer detalles sobre la sentencia.

http://msdn.microsoft.com/en-us/library/ms188388(v=sql.100).aspx

En términos generales la recomendación de reconstruir y reorganizar un índice cambia para las bases de datos de SharePoint 2010, generalmente la recomendación de SQL Server es reconstruir un índice cuando la fragmentación es mayor o igual a 30% como lo sugiere el siguiente documento.

http://msdn.microsoft.com/en-us/library/ms189858(v=sql.100).aspx

Como ya lo mencionamos para los casos de SharePoint esto cambia así que deberá considerarlo en sus planes de mantenimiento.

Definir el Fill Factor

El fill factor se utiliza para mejorar el rendimiento de los índices, este parámetro determina el porcentaje de espacio que es ocupado por los datos en cada página a nivel de los nodos hoja en el árbol binario que conforma el índice, el porcentaje restante se reserva para los datos que en un futuro próximo se van a alojar. La configuración por defecto de una instancia de SQL Server es 0, lo cual significa que una página estará llena al 100%, para SharePoint 2010 este parámetro se debe modificar a un valor de 80, nuestro equipo de desarrollo de producto ha realizado varias pruebas y se ha demostrado que el este valor es el ideal para las bases de datos de SharePoint 2010 y no se recomienda configurarlo por tabla e índice, lo ideal es configurarlo para la instancia utilizando el comando sp_configure y el parámetro fill factor (%).

Sin duda, las recomendaciones que se sugieren le ayudarán a evitar muchos dolores de cabeza y problemas relacionados con un bajo rendimiento de su aplicación, estas sugerencias aplican para las versiones SQL Server 2005, 2008 y 2008 R2. Los planes de mantenimiento son básicos para mantener una buena salud en la capa de SQL Server y para el caso de SharePoint 2010 es imprescindible considerar las recomendaciones emitidas por el equipo de desarrollo del producto. Si desea consultar mayor información por favor revise el siguiente vínculo:

http://www.microsoft.com/download/en/details.aspx?id=24282