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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top