En CRM la mayoría de problemas de rendimiento residen en la base de datos, en el SQL Server, por ello es importante realizar un buen mantenimiento de la misma. Para ello hemos colaborado con nuestro compañero del equipo de soporte de SQL Server, José Manuel Jurado (muchos de los que tenéis casos con nosotros habéis trabajado ya con el), especialista en casos de rendimiento,  el ya escribió una entrada sobre esto mas completa, que os recomendamos que visiteis, que podéis encontrar en el siguiente enlace: http://blogs.msdn.com/b/esecuelesinfronteras/archive/2011/08/18/mejores-pr-225-cticas-para-el-dise-241-o-de-237-ndices.aspx a continuación, con el permiso de José Manuel, yo os hago un breve resumen de la misma.

Una de las practicas recomendadas es la creación de índices, los indicadores de que es necesario la creación de uno o mas índices son:

  • Alto consumo de CPU
  • Contadores de rendimiento de disco elevados
  • Muchas operativas en la tabla scan

A continuación os damos unas querys muy útiles que nos permiten verificar lo siguiente:

Detectar que índices mejorarían el rendimiento.

SELECT
statement AS [database.scheme.table],
column_id , column_name, column_usage,
migs.user_seeks, migs.user_scans,
migs.last_user_seek, migs.avg_total_user_cost,
migs.avg_user_impact
FROM sys.dm_db_missing_index_details AS mid
CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON mig.index_handle = mid.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats  AS migs
ON mig.index_group_handle=migs.group_handle
ORDER BY mig.index_group_handle, mig.index_handle, column_id

Esta query nos devolverá una tabla en la cual hay un campo que nos interesa mucho el avg_user_impact, este nos dirá que porcentaje de mejora provocaría la creación del índice que se detalla. Nos devolvería algo como esto:

 

Detectar fragmentación de índices

select OBJECT_NAME([object_id]) as NombreTabla, *
from master.sys.dm_db_index_physical_stats(DB_ID('bbddusuario'),NULL,NULL,NULL,'DETAILED')
order by avg_fragmentation_in_percent desc

Esta query nos devolverá varios campos, el que mas nos interesa es el de avg_fragmentation_in_percent, este campo nos indica el nivel de fragmentación de cada índice. Para reconstruir estos índices para reducir la fragmentación podéis acceder a http://msdn.microsoft.com/es-es/library/ms188917.aspx donde tenéis mas información.

clip_image004[4]

 

En el resto de la entrada que repito una vez mas, podéis encontrar en http://blogs.msdn.com/b/esecuelesinfronteras/archive/2011/08/18/mejores-pr-225-cticas-para-el-dise-241-o-de-237-ndices.aspx podréis encontrar mas información.

 

Un saludo y hasta la próxima!

 

José Andrés Álvarez Skinner

EMEA CRM Support Engineer