Identificação de objetos não utilizados no Microsoft SQL Server 2005
-
08-07-2019 - |
Pergunta
É uma tarefa trivial para descobrir se um objeto é referenciado por outra coisa ou não. O que eu gostaria de fazer é identificar se é ou não de realmente sendo usado .
A minha solução originalmente envolvia uma combinação de uma tabela que continha uma lista de objetos no banco de dados e um trabalho de hora em hora.
O trabalho fez duas coisas. Primeiro, ele olhou para novos objetos que tinham sido adicionados ao banco de dados desde a última execução. Em segundo lugar, olhou para cache de objetos de sql. Se um objeto na tabela foi listado no cache, que foi marcada na tabela como tendo sido recentemente "visto" em uso.
No final de um período de seis meses ou qualquer outra coisa, foram examinados o conteúdo da tabela. Qualquer coisa listados na tabela que não tinha sido visto referenciado desde que começou a monitorar foram provavelmente seguro backup e remove.
Claro, existe a possibilidade de objetos que são usados ??apenas, digamos, uma vez por ano ou o que quer, mas parecia trabalho para a maior parte.
Foi um tipo de dor de trabalhar com, no entanto.
Há cerca de uma meia dúzia de bancos de dados com quem estou trabalhando, a maioria dos quais com toneladas de mesas legados sobre eles, que permanecem muito tempo depois de seus criadores originais mudou-se para outras empresas.
O que eu estou procurando é um método bastante confiável de manter o controle de quando um objeto (tabela, visão, procedimento armazenado ou função) está sendo chamado.
Para aqueles de vocês que acompanham actualmente este tipo de coisa, que método / code que você usa e que você recomendaria?
Solução
Com o SQL Server 2005, você pode usar o gerenciamento dinâmico vista sys.dm_db_index_usage_stats. O nome diz "index", mas isso é um pouco enganador - cada mesa tem uma entrada no aqui, mesmo se ele não tem nenhum índice. Aqui está uma consulta útil a partir de 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
Aqui está o artigo original:
http://www.sqlmag.com/Article/ArticleID/53878/ sql_server_53878.html
Tenha em mente que estas estatísticas de uso redefinir quando o SQL Server é reiniciado.