¿Método para encontrar índices innecesarios de una base de datos operativa de SQL Server?

¿Método para encontrar índices innecesarios de una base de datos operativa de SQL Server?

Además de desperdiciar espacio en la base de datos, los índices innecesarios en SQL Server pueden ralentizar las operaciones de inserción y actualización. Los desarrolladores que carecen de experiencia en los principios de las bases de datos a veces tienden a crear índices de tablas que no tienen sentido para las consultas en ejecución.

¿Existe un procedimiento o herramienta común para SQL Server 2005/2008 para analizar la carga de trabajo de la base de datos y dar pistas sobre qué índices nunca se utilizan o no son necesarios en una determinada base de datos operativa?

¡Gracias!

Respuesta1

Estoy viendo un pequeño y lindo script T-SQL aquí (http://blog.sqlauthority.com/2008/02/11/sql-server-2005-find-unused-indexes-of-current-database/) para mostrar índices no utilizados que deberían ejecutarse en SQL Server 2005. Otrohttp://aspadvice.com/blogs/ssmith/archive/2008/03/31/Find-Unused-SQL-2005-Indexes-for-Current-DB.aspxaquí también.

Parece que dm_db_index_usage_stats es la clave de todo esto. ¡Con buena pinta! (Verhttp://msdn.microsoft.com/en-us/library/ms188755.aspx Tendré que mirar algunas bases de datos de producción que creé ahora para ver cómo se ven estas estadísticas. (sonrisa)

Editar: algunos antecedentes adicionales muy agradables aquí:http://blogs.msdn.com/craigfr/archive/2008/10/30/what-is-the-difference-between-sys-dm-db-index-usage-stats-and-sys-dm-db- índice-estadísticas-operacionales.aspx

Respuesta2

Algunas cosas a tener en cuenta sobre el uso de sys.dm_db_index_usage_stats:

  1. La salida solo contiene índices que se han utilizado desde la última vez que se inició la base de datos. Cuando se cierra una base de datos, se eliminan todas las entradas del caché de información en memoria de esa base de datos. De manera similar, el caché no sobrevive a un reinicio instantáneo. No hay forma de borrar manualmente las entradas de una base de datos en particular sin reiniciar la base de datos. Los diversos artículos a los que se hace referencia en la primera respuesta (y también en mi blog) describen cómo capturar el resultado en distintos momentos para realizar análisis de series de tiempo.
  2. Asegúrese de probar sucompletociclo comercial. No desea eliminar un índice que se utiliza para un informe de fin de mes o una consulta del director ejecutivo, aunque pueda resultar tentador.
  3. Asegúrese de comprender los distintos recuentos y lo que significan antes de tomar una decisión sobre si el índice se utiliza de manera rentable o simplemente se mantiene a costa de los gastos.

Espero que esto ayude.

PD: Una cosa más para quienes lean esto y se pregunten si existe un método equivalente para SQL Server 2000: no, nosotros (como yo estaba en el equipo en ese momento) solo agregamos la capacidad para 2005 en adelante.

Respuesta3

Tenemos un artículo wiki en SQLServerPedia con un script para hacer esto, además de un video tutorial sobre cómo usarlo:

Uno para encontrar índices que no se utilizan:

http://sqlserverpedia.com/wiki/Find_Indexes_Not_In_Use

Y otro para buscar índices deberías agregar:

http://sqlserverpedia.com/wiki/Find_Missing_Indexes

Respuesta4

Hice algunas consultas relacionadas con el índice y lo mostré en mi blog (http://dbalink.wordpress.com/2008/11/09/how-to-finding-index-usage-stats-with-dmv-in-tsql/)

información relacionada