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