Determinar que los índices en una tabla no se utilizan

12

He estado ejecutando este script para tratar de encontrar índices extraños

select o.name as TableName, i.name as IndexName, p.reserved_page_count * 8.0 / 1024 as     SpaceInMB, s.*
from     sys.dm_db_index_usage_stats s
inner join sys.objects o on s.object_id = o.object_id
inner join sys.indexes i on i.index_id = s.index_id and i.object_id = o.object_id
inner join sys.dm_db_partition_stats p on i.index_id = p.index_id and o.object_id =      p.object_id
where o.name = TableName

Sé que cuando last_user_seek / scan / lookup son todos nulos, que ningún usuario ha usado el índice desde el último reinicio. Pero me pregunto qué son los escaneos / búsquedas / búsquedas del sistema ... Porque en cierta tabla encontré 5 que no tenían actividad de usuario, pero una tenía actividad del sistema hace 10 días. ¿Alguien tiene alguna idea sobre qué análisis / búsquedas / búsquedas del sistema podrían ser? Estas tablas parecen realmente sobre indexadas y me gustaría recortar la grasa.

Aushin
fuente
Publiqué la misma pregunta en sqlservercentral y obtuve respuestas allí también. El enlace al tema es: sqlservercentral.com/Forums/Topic1205983-391-3.aspx?Update=1
Aushin
Relacionado: dba.stackexchange.com/q/56/2660
Nick Chammas
@Aushin el enlace que publicaste anteriormente está llevando a una discusión extremadamente desordenada llena de sentimientos y misiones secundarias que nadie realmente quiere seguir.
Magier

Respuestas:

10

El mantenimiento del índice (reconstrucción / reorganización) y la actividad DBCC CHECKDB probablemente, posiblemente actualizaciones de estadísticas. ¿Algún mantenimiento programado configurado?

Si no hay acceso de usuario, bíntelos. Solo tenga en cuenta el período de tiempo durante el cual decide que ya no se usan. ¿Hay tareas de informes semanales o mensuales, por ejemplo?

Mientras estás buscando, busca también índices duplicados .

Editar: con respecto al enlace SSC

De un escaneo rápido a través del hilo, parece que la gente de SSC tenía pensamientos similares. Sin embargo, están adoptando una postura más cautelosa sobre el posible uso "ocasional" de estos índices, tomando la posición de que alguien los puso allí por una razón, un argumento perfectamente razonable. El argumento contrario es que con demasiada frecuencia es exactamente lo contrario, alguien los puso allí porque pensaron que era lo correcto, pero por falta de comprensión o falta de pruebas, no fue así.

He traído un par de sistemas desde el borde al no hacer nada más que soltar índices no utilizados y duplicados. La indexación excesiva puede causar caos.

Es su sistema, debe comprender y sopesar los riesgos de dejar estos índices en su lugar o eliminarlos. Si decide continuar con la caída, documente lo que hace, por qué lo está haciendo, escriba los índices y publíquelos a todas las partes interesadas.

Mark Storey-Smith
fuente
+1 en esto: estoy seguro de que son esas actividades que Mark mencionó. Nada que deba preocuparle, ampliado en una respuesta adicional a continuación.
Mike Walsh
Gracias por esto. También tuve un hilo en sqlservercentral sobre esto. Publicaré el enlace a lo que dijeron en mi pregunta original.
Aushin
9

Glenn Berry ha escrito algunos scripts geniales para ayudarlo a encontrar sus índices faltantes. Sugiero usar sus guiones que eliminan algunas de las conjeturas de la tarea para usted. Esas secuencias de comandos no solo buscan búsquedas / escaneos / búsquedas nulas o de 0 usuarios, sino que también buscan índices que tienen un gran sesgo entre la actividad de lectura y la actividad de escritura, posiblemente aún resultando en un mejor rendimiento general al caer. Verificaría sus guiones, puedes comenzar con esta publicación suya .

No estaría preocupado por la actividad del sistema. Eso no es algo que empeorará si elimina los índices, de hecho, podría ser una actividad que solo ocurre en ese índice porque existe. Lo principal que le importa es la actividad de lectura del usuario y la actividad de escritura del usuario y equilibrar eso.

Mike Walsh
fuente
5

Recuerde que los índices también proporcionan información útil para el Optimizador de consultas, incluso si no se utilizan. He hecho bastantes cosas sobre el impacto de Uniqueness, por ejemplo. Si elimina un índice único porque no tiene búsquedas ni escaneos, aún podría afectar negativamente el rendimiento.

Rob Farley
fuente
Gran punto y creo que los guiones de Glenn buscan restricciones únicas. Si no es el suyo, quizás un conjunto diferente, tendré que investigar eso.
Mike Walsh
0

Además de lo que todos los demás han declarado, los índices contra las columnas FK referenciadas nunca pueden mostrar búsquedas o escaneos, pero se usan debajo de las cubiertas.

Jeremy Lowell
fuente