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.
sql-server-2005
index
Aushin
fuente
fuente
Respuestas:
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.
fuente
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.
fuente
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.
fuente
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.
fuente