Pregunta

Es una tarea trivial averiguar si un objeto es referenciado por otra cosa o no. Lo que me gustaría hacer es identificar si realmente se está utilizando .

Mi solución originalmente involucraba una combinación de una tabla que contenía una lista de objetos en la base de datos y un trabajo por hora.

El trabajo hizo dos cosas. Primero, buscó nuevos objetos que se habían agregado a la base de datos desde la última ejecución. En segundo lugar, miró el caché de objetos de sql. Si un objeto en la tabla figuraba en la memoria caché, se marcaba en la tabla como "visto" recientemente. en uso.

Al final de un período de seis meses o lo que sea, se examinó el contenido de la tabla. Cualquier cosa enumerada en la tabla que no se haya visto referenciada desde que comencé a monitorear probablemente sea segura para hacer una copia de seguridad y eliminarla.

Claro, existe la posibilidad de objetos que solo se usan, por ejemplo, una vez al año o lo que sea, pero parece funcionar en su mayor parte.

Sin embargo, fue un poco difícil trabajar con ella.

Hay aproximadamente media docena de bases de datos con las que estoy trabajando, la mayoría de las cuales tienen toneladas de tablas heredadas, que permanecen mucho después de que sus creadores originales se mudaron a otras compañías.

Lo que estoy buscando es un método bastante confiable para realizar un seguimiento de cuándo se llama a un objeto (tabla, vista, procedimiento almacenado o función).

Para aquellos de ustedes que actualmente monitorean este tipo de cosas, ¿qué método / código utilizan y lo recomendarían?

¿Fue útil?

Solución

Con SQL Server 2005, puede usar la vista de administración dinámica sys.dm_db_index_usage_stats. El nombre dice " index " pero eso es un poco engañoso: cada tabla tiene una entrada aquí, incluso si no tiene ningún índice. Aquí hay una consulta útil de la revista SQL:

SELECT 
  t.name AS 'Table', 
  SUM(i.user_seeks + i.user_scans + i.user_lookups) 
    AS 'Total accesses',
  SUM(i.user_seeks) AS 'Seeks',
  SUM(i.user_scans) AS 'Scans',
  SUM(i.user_lookups) AS 'Lookups'
FROM 
  sys.dm_db_index_usage_stats i RIGHT OUTER JOIN 
    sys.tables t ON (t.object_id = i.object_id)
GROUP BY 
  i.object_id, 
  t.name
ORDER BY [Total accesses] DESC

Aquí está el artículo original:

http://www.sqlmag.com/Article/ArticleID/53878/ sql_server_53878.html

Tenga en cuenta que estas estadísticas de uso se restablecen cuando se reinicia SQL Server.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top