Localizando tabelas não usadas

Getting your Trinity Audio player ready...

Este script irá retornar uma lista de tabelas do banco que, desde o último restart do SQL, não tiveram um SELECT executado contra elas. Isto pode ser usado para determinar se a tabela é usada ou não.
ATENÇÃO: As estatísticas do SQL são apagadas toda a vez que o serviço do SQL é reiniciado. Então, não é porque o script esta informando que a tabela não teve uso que ela não é importante, ela apenas não teve uso desde o último restart. Então não saia apagando tabelas ao seu bel prazer, vai que uma delas é usada pelo sistema fiscal apenas a vez por mês e você reinicia o SQL a cada Windows Update, você sempre vai ver essa tabela com esse script.

WITH LastActivity (ObjectID, LastAction) AS
(
SELECT object_id AS TableName,
             last_user_seek as LastAction
     FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
UNION
SELECT object_id AS TableName,
             last_user_scan as LastAction
     FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
UNION
SELECT object_id AS TableName,
             last_user_lookup as LastAction
     FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
)
SELECT OBJECT_NAME(so.object_id) AS TableName,
         MAX(la.LastAction) as LastSelect
FROM sys.objects so
LEFT
JOIN LastActivity la
ON so.object_id = la.ObjectID
WHERE so.type = ‘U’
AND so.object_id > 100
GROUP BY OBJECT_NAME(so.object_id)
ORDER BY OBJECT_NAME(so.object_id)

2 thoughts on “Localizando tabelas não usadas”

  1. Leka, estou pesquisando uma forma de apagar tabelas não usadas. Como faço para utilizar seu script? Conhece algum plugin que faz o serviço?

    1. Você pode adicionar esse script a um JOB e adicionar um insert do resultado do select para uma tabela em uma base separada. Coloca o JOB para executar com uma periodicidade curta e deixa rodando durante algumas semanas.
      Outra opção, dependendo da versão do SQL, é você montar uma auditoria de acesso a tabela, desde a versão SQL 2008 essa é uma boa opção.
      O maior problema de apagar tabelas é saber se não tem um processo que é executado apenas 1x a cada 45 dias (exemplo) e quando você descobrir que apagou já ser tarde demais.

Leave a Reply

Your email address will not be published. Required fields are marked *