- http://blogs.msdn.com/b/sofocle/archive/2012/07/24/sharepoint-still-slow-to-open-first-page-could-be-a-problem-with-microsoft-clr.aspx
- http://blog.muhimbi.com/2009/04/new-approach-to-solve-sharepoints.html
sharepoint & project server
Sharepoint me proporciona seguridad y me hace sentir más fuerte. Las 10 cosas que más me gustan de Sharepoint.
Microsoft Project es quizá la herramienta de gestión de proyectos más conocida y utilizada por los líderes de proyectos...
Serie de artìculos que nos ayudan a incorporar diseño gráfico en las implementaciones de SharePoint...
Artículos publicados en la revista especializada en SharePoint: CompartiMOSS.
Microsoft Project permite almacenar líneas base de los proyectos con el objetivo de hacer controles y comparaciones durante la vida del mismo. Las líneas base son una foto del proyecto que almacena la siguiente información:
Al almacenar esta información se pueden hacer ciertos análisis, comparando lo que se debería haber hecho con lo que realmente se hizo. Incluso se pueden almacenar varias versiones de líneas base. También se pueden generar vistas de Gantt que comparen dos líneas base.
Son muchos los puntos a favor, pero hay un punto en contra: el rendimiento. Almacenar una línea base ocupa bastante lugar, porque prácticamente duplica el espacio utilizado, lo que ocasiona:
Si el rendimiento es un problema importante, el punto a analizar es si realmente se necesita utilizar esta funcionalidad o alcanza con una de menor alcance.
En este documento se analizan alternativas para un escenario en el cual interesa almacenar sólo las fechas planificadas de un proyecto y consultarlas en un reporte en Project Server.
.
La funcionalidad de planes interinos, es otra alternativa que Project ofrece y que sólo almacena la siguiente información:
Si esa información alcanza para el requerimiento, entonces es una buena elección, porque cambia el espacio ocupado, tal como se ve en el siguiente ejemplo, de un proyecto creado desde cero con 148 tareas (basado en la plantilla MSF Application Development).
| Acción | Espacio ocupado |
| Proyecto 1 - Grabación inicial | 423 K |
| Proyecto 1 - Grabación de línea base sin cambios | 423 K |
| Proyecto 1 - Cambio de fecha de proyecto y grabación | 720 K |
| Proyecto 1 - Cambio de fecha de proyecto y grabación línea base 2 | 944K |
| Proyecto 1 - Cambio de fecha de proyecto y grabación línea base 3 | 1.152 K |
| Proyecto 2 - Grabación inicial | 423 K |
| Proyecto 2 - Grabación de línea base sin cambios | 544 K |
| Proyecto 2 - Cambio de fecha de proyecto y grabación | 576 K |
| Proyecto 2 - Cambio de fecha de proyecto y grabación línea base 2 | 576 K |
| Proyecto 2 - Cambio de fecha de proyecto y grabación línea base 3 | 592 K |
Como se ve en la tabla, los planes interinos ocupan menos lugar, pero tienen un problema en las implementaciones de Project Server. La información de las fechas copiadas no llega a la base de datos de Reporting en forma automática, lo cual haría necesario desarrollar algún tipo de custom para que pueda ser consumida por un reporte.
Otra alternativa que surge es la de hacer menos pesada la línea base, usando las siguientes opciones:
Esta imagen muestra las opciones elegidas (en donde previamente se seleccionó la tarea 0):
A continuación los resultados:
| Acción | Espacio ocupado |
| Proyecto 3 - Grabación inicial | 448 K |
| Proyecto 3 - Grabación de línea base sin cambios | 544 K |
| Proyecto 3 - Cambio de fecha de proyecto y grabación | 544 K |
| Proyecto 3 - Cambio de fecha de proyecto y grabación línea base 2 | 560 K |
| Proyecto 3 - Cambio de fecha de proyecto y grabación línea base 3 | 560 K |
Se puede ver que casi no ocupa espacio adicional. También se puede ver que sólo se almacena la información de línea base en la tarea 0 del proyecto:
¿Cuáles son las desventajas?
En caso que se decida no utilizar líneas base, las alternativas posibles son:
Estas opciones no tendrían impacto en el rendimiento y hasta podrían ser más intuitivas. Pero se pierden todas las ventajas de una funcionalidad estándar como la línea base, que fácilmente nos permite visualizar desvíos y Gantts de tracking.
Eso es todo por hoy. Hasta la próxima.
Este es el segundo artículo que enumera posibles acciones para mejorar el rendimiento de Project Server 2007. En el artículo anterior se enumeró como acción principal la desfragmentación de índices de la base de datos, lo que en principio generó una mejora del 28% en el tiempo de publicación de un proyecto.
En esta segunda parte vamos a probar otras acciones, que a continuación se enumeran:
Esta podría ser una de las posibles causas que afecten el rendimiento. En el proyecto que usamos de prueba, sólo contábamos con 4 recursos locales. Los eliminamos y vimos que el tiempo de publicación no cambió.
De todas maneras, es una acción que habría que tener en cuenta si tenemos muchos recursos locales, cosas que en principio no tiene mucho sentido en una instalación de Project Server, donde los recursos deberían ser corporativos.
Truncar los archivos de transacciones es una acción que podría afectar el rendimiento. En nuestro caso de ejemplo, había algunos archivos de tamaño importante. Los truncamos a todos y no obtuvimos mejoras. Lo que sí, recuperamos espacio en disco.
Para efectuar el truncamiento, utilizamos estos comandos (en el ejemplo están aplicados a la base de Reproting):
Use ProjectServer_Reporting
Go
Backup Log ProjectServer_Reporting With Truncate_Only
GO
Declare @LogFileLogicalName sysname
select @LogFileLogicalName=Name from sys.database_files where Type=1
print @LogFileLogicalName
DBCC Shrinkfile(@LogFileLogicalName,100)
Microsoft Best Practices Analyzer for Windows SharePoint Services 3.0 and the 2007 Microsoft Office System es un producto de Microsoft que genera ciertos informes que pueden ayudar a los administradores en temas de rendimiento y escalabilidad.
Instalamos el producto descargándolo desde el siguiente enlace:
http://www.microsoft.com/en-us/download/details.aspx?id=11948
Una vez instalado y descomprimido, ejecutamos el siguiente comando:
sharepointbpa.exe -cmd analyze -substitutions SERVER_NAME nombre_servidor
Es posible que se obtenga un mensaje como el siguiente:
WARNING: No messages in file. Analysis may not have been run.
En nuestro caso sucedió porque no habíamos respetado el valor “SERVER_NAME”.
Una vez ejecutado, se obtiene un informe como el siguiente:
En particular, en este caso, el informe no generó recomendaciones que puedan mejorar el rendimiento.
Otras de las pruebas realizadas consistieron en controlar los recursos del servidor y del cliente. Controlamos la memoria y CPU de ambos utilizando el administrador de tareas de Windows en el momento de la publicación de un proyecto.
También ejecutamos algunas herramientas de SQL Server como Activity Monitor y Performance Monitor. No encontramos mayores problemas, pero es importante realizar estos controles. Podrían llevarnos a acciones como el cambio de configuración de nuestra granja, la separación física del servidor de SQL, entre otras.
En el documento anterior nos habíamos enfocado en la des-fragmentación de índices. En esta prueba, realizamos un plan completo que incluyó las actividades que se muestran en la siguiente imagen:
No se lograron mejoras significativas, pero de todas maneras sigue siendo una tarea recomendable. Un dato importante es que el plan completo llevó más de 30 minutos de ejecución:
Otra prueba realizada consistió en la eliminación de las líneas base no utilizadas. En el proyecto de ejemplo eliminamos 5 líneas base de un total de 6. Esto redujo el tiempo de publicación de 5 a 3 minutos. Importante mejora.
Finalmente optamos por eliminar un conjunto de calendarios locales que tenía el proyecto, desde la opción Calendarios dentro de Herramientas / Organizador. Esto generó una mejora de un minuto aproximada.
No se puede decir con exactitud cuanta mejora atribuir a la eliminación de calendarios y cuánto a las línea base, aunque pareciera que la eliminación de las líneas base tiene un efecto más que importante.
Nuestro proyecto de prueba de 2.000 tareas tardaba originalmente 7 minutos en completar todas las tareas asociadas a la publicación, tal como se muestra en la imagen:
Luego de aplicar algunas acciones, se observa una reducción de 5 minutos, una mejora de 71% distribuida de la siguiente forma:
En la imagen se ve el resultado:
La acción de desfragmentación de índices se puede programar para ejecutar periódicamente fuera del horario operativo.
Las acciones de eliminación de líneas base o calendarios locales, pueden ser buenas recomendaciones hacia los líderes para mantener sus proyectos más limpios, y por lo tanto con mejor rendimiento
Otras acciones que pueden mejorar el rendimiento tienen que ver con la revisión y reducción de ciertos parámetros como:
Este artículo es el primero de una serie de artículos sobre la mejora en el rendimiento de Project Server. En este primer documento se describen buenas prácticas de mantenimiento de la base de datos de Project Server 2007, lo que incluye fundamentalmente:
En el documento se explica en detalle los puntos 1 y 2. Para mayor información sobre los puntos 3 y 4, consultar el siguiente artículo: http://surpoint.blogspot.com.ar/2012/03/sharepoint-2007monitoreo-de-la-la-base.html
Incluye además pruebas realizadas en un ambiente de estas características:
Antes de comenzar, es importante recordar que Project Server tiene 4 bases de datos:
Draft soporta la información de los proyectos aún no publicados, no tiene comunicación con Project Web Access. Maneja también las tablas utilizadas por el servicio de cola de Project Server.
Published almacena los proyectos publicados que pueden ser accedidos desde PWA. También incluye información específica de PWA como timesheets, vistas o la definición propia de los campos personalizados.
Archive almacena copias de seguridad en línea.
Reporting contiene la información de Published, pero optimizada para reportes y para la carga de los cubos OLAP. Se actualiza prácticamente en tiempo real, es sencilla de entender y está optimizada para operaciones de lectura.
Además existen las bases de datos de SharePoint:
Más información en: http://technet.microsoft.com/en-us/library/cc973099(v=office.12)
Antes de comenzar con las tareas e mantenimiento, verificar que:
Algunas buenas prácticas a tener en cuenta para nuestro plan de mantenimiento:
Algunas otras recomendaciones pueden ser consultadas en este artículo: http://technet.microsoft.com/en-us/library/cc973104(v=office.12)
Este primer paso se ejecuta para cada base de datos desde SQL Server Management Studio. Utilizamos DBCC CHECKDB. Más información en http://msdn.microsoft.com/en-us/library/ms180226.aspx
USE ProjectServer_Draft
DBCC CHECKDB
USE ProjectServer_Published
DBCC CHECKDB
USE ProjectServer_Reporting
DBCC CHECKDB
USE ProjectServer_Archive
DBCC CHECKDB
USE WSS_Content
DBCC CHECKDB
USE SharedServices1_DB
DBCC CHECKDB
USE SharePoint_Config
DBCC CHECKDB
Si no encontramos problemas, debería aparecer un mensaje como el siguiente:
DBCC results for 'ProjectServer_Draft'.
...
CHECKDB found 0 allocation errors and 0 consistency errors in database 'SharePoint_Config'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Las pruebas realizadas en un ambiente de prueba arrojaron estos tiempos:
| Base de Datos | Tiempo |
| Draft | 2 minutos |
| Published | 3 minutos |
| Reporting | 2 minutos |
| Archive | 2 minutos |
| SharePoint – Contenido | 1 minuto |
| SharePoint – Configuración | Despreciable |
| SharePoint – SSP | Despreciable |
| Total | 10 minutos |
Comenzamos por medir el estado de desfragmentación de la base de datos utilizando sys.dm_db_index_physical_stats. Más información en http://technet.microsoft.com/en-us/library/ms188917(SQL.90).aspx
Si especificamos todos los parámetros en nulo, medirá todo lo que tenemos en la instancia de SQL Server. Si necesitamos ejecutarlo para una base en particular, podemos especificar el ID de la base de datos. Para conocer el ID de la base de datos utilizamos BD_ID. Más información en http://technet.microsoft.com/en-us/library/ms186274(v=sql.90).aspx
Para comenzar, vamos a verificar los índices de la base de datos Draft de la siguiente forma:
USE ProjectServer_Draft
SELECT DATABASE_ID,
CAST(DB_NAME(DATABASE_ID) AS VARCHAR(30)) AS 'DatabaseName',
CAST(OBJECT_NAME([OBJECT_ID]) AS VARCHAR(40)) AS 'TableName',
INDEX_ID,
CAST(INDEX_TYPE_DESC AS VARCHAR(30)) AS INDEX_TYPE_DESC,
AVG_FRAGMENTATION_IN_PERCENT
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(N'ProjectServer_Draft'),NULL,NULL,NULL,NULL )
ORDER BY AVG_FRAGMENTATION_IN_PERCENT DESC;
Es importante manejarse con cuidado a la hora de pasar parámetros a este procedimiento usando funciones del sistema. Para mayor información, consultar la sección “Using System Functions to Specify Parameter Values” en este enlace: http://msdn.microsoft.com/en-us/library/ms188917.aspx
Debemos esperar un valor que tienda a 0 y que en lo posible no supere el 10% en el campo AVG_FRAGMENTATION_IN_PERCENT.
Obtendremos un resultado de este tipo:
Continuamos con la base Published. El resultado es el siguiente:
Realizamos el mismo proceso con el resto de las bases de datos. A continuación los tiempos de ejecución:
| Base de Datos | Tiempo |
| Draft | Medio minuto |
| Published | Medio minuto |
| Reporting | Medio minuto |
| Archive | 1 minuto |
| SharePoint – Contenido | Medio minuto |
| Total | |
Las acciones a tomar pueden depender del nivel de fragmentación:
| Acción | Nivel de fragmentación |
| Reorganización | Hasta 10% |
| Reonstrucción | 10% a 75% |
| Reconstrucción fuera de línea | Más del 75% |
En SharePoint no están soportados los comandos DROP INDEX y CREATE INDEX, en su lugar se debe usar ALTER. En rigor, para desfragmentar los índices de SharePoint, se recomienda ejecutar el procedimiento almacenado tal como se indica en este artículo: http://support.microsoft.com/kb/943345/en-us
Para ProjectServer, utilizaremos un asistente de plan de mantenimiento de Base de Datos.
Antes de comenzar con las tareas de re construcción de índices, vamos a tomar los tiempos que lleva la publicación de un proyecto de 2.000 tareas. Vemos en la pantalla de la cola de Project Server los resultados obtenidos: 7 minutos
Vamos a ejecutar el proceso de reconstrucción de índices paras las base de datos de Project Server (ya mencionamos anteriormente que el procedimiento es diferente al recomendado para SharePoint).
Para ello, creamos un plan de mantenimiento con la única opción de reconstruir los índices, recordar que ya habíamos verificado la integridad de la base de datos anteriormente. En un plan productivo, deberíamos incluir más opciones. Más información sobre planes de mantenimiento en estos enlaces:
En la siguiente imagen se ve desde dónde comenzar la creación de un plan de mantenimiento en SQL Server Management Studio:
Estas son las opciones elegidas:
Nuevamente, se necesita SP2 de SQL Server 2005, para aplicar este procedimiento.
En caso contrario, no sólo no es seguro, sino que podemos romper la base de datos.
Elegimos el lugar en donde dejar el log: C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG. Luego ejecutamos el plan de mantenimiento.
Importante:
Esta es la pantalla de inicio de la ejecución:
Esta es la pantalla de fin:
Una vez finalizado el plan, vamos a revisar el estado de fragmentación de los índices, en este caso de la base Published. El resultado se ve en la siguiente imagen:
Algunos cambios como el resaltado son importantes.
Al publicar nuevamente el mismo proyecto, se observa una mejora de 2 minutos, que en este caso equivale al 28% (la medición no es científica).
Realizar tareas de mantenimiento sobre SQL Server es una tarea relativamente sencilla, pero fundamental, ya que estamos hablando de un componente central de la arquitectura, que puede impactar en el rendimiento general.
En el caso de Project Server, la desfragmentación de índices es importante, pero debería ser combinada con otros puntos como:
Nos vemos en el próximo artículo de la serie.
Paper publicado por Microsoft con el siguiente contenido:
These white papers describe the performance and capacity impact of specific feature sets included in SharePoint Server 2010. These white papers include information about the performance and capacity characteristics of the feature and how it was tested by Microsoft, including:
- Test farm characteristics
- Test results
- Recommendations
- Troubleshooting performance and scalability
Descargar desde: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=12768
