martes, 19 de marzo de 2013

SQL Server: Información sobre uso de índices

Debido a que los índices ocupan espacio (disco) y requiere un coste (cpu) mantenerlos actualizados es muy importante controlar su uso y si es nulo deberían ser eliminados. En este sentido es importante destacar que en ocasiones se crean índices para realizar procesos concretos (por ejemplo, una transferencia de datos a otro sistema) que una vez concluidos, si ya no va a volver a realizarse el proceso, podrían eliminarse.

Mediante la DMV (dynamic management view) sys.dm_db_index_usage_stats SQL Server nos permite ver el uso de los índices de una base de datos, veamos un ejemplo:
-- Obtenemos info sobre uso de índices definidos en tablas de usuario
SELECT OBJECT_NAME(ius.object_id) AS TableName, 
       idx.name AS IndexName, ius.*      
FROM SYS.DM_DB_INDEX_USAGE_STATS AS ius 
INNER JOIN SYS.INDEXES AS idx 
ON (idx.object_id = ius.object_id AND idx.index_id = ius.index_id)
WHERE OBJECTPROPERTY(ius.object_id,'IsUserTable') = 1 
Sobre la consulta anterior destacaremos:

  • La columna TableName devuelve la tabla sobre la que está definido el índice.

  • La columna IndexName devuelve el nombre del índice sobre el que se muestra información de uso.

  • Las columnas user_seeks, user_scans y user_lookups, como su nombre especifica en cada caso, nos indican el número de accesos de consultas de usuario para cada uno de los tipos. Si las 3 columnas anteriores tienen valor 0 es que el índice no tiene uso por lo que debería valorarse la posibilidad de eliminarlo. Es importante en este punto destacar y antes de eliminar ningún índice que si el servicio de SQL Server se reinicia todos los valores de la vista se resetean; de igual forma, si se hace un Detach de la base de datos los valores de la vista se eliminan.
  • La columna user_updates nos indica el número de INSERTs / DELETEs / UPDATEs sobre el índice para consultas de usuario.

  • Las columnas last_user_seek, last_user_scan, last_user_lookup y last_user_update nos indican la última fecha en que los correspondientes valores han sido actualizados. Si el valor es NULL es que no ha habido accesos de ese tipo, si el valor es muy antiguo quizás ese índice haya dejado de utilizarse, debería profundizarse más sobre su utilidad y posible eliminación.

  • La condición indicada en el WHERE nos sirve para comprobar sólo el uso de índices definidos sobre tablas de usuario.

Si queréis más información sobre la DMV sys.dm_db_index_usage_stats podéis acceder a este enlace del MSDN. Y hasta aquí el artículo de hoy, espero que os sirva para mejorar el rendimiento de vuestros índices. Recordad también que dentro de areaTIC podéis encontrar otros artículos, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...) 


LECTURAS RELACIONADAS RECOMENDADAS POR AREATIC.NET

No hay comentarios:

Publicar un comentario en la entrada