Выявление неиспользуемых объектов в Microsoft SQL Server 2005

StackOverflow https://stackoverflow.com/questions/290773

  •  08-07-2019
  •  | 
  •  

Вопрос

Это простая задача - выяснить, на какой объект ссылается что-то еще или нет. Я хотел бы определить, действительно ли он используется .

Мое решение изначально включало в себя комбинацию таблицы, в которой содержался список объектов в базе данных, и почасовой работы.

Работа сделала две вещи. Сначала он искал новые объекты, которые были добавлены в базу данных с момента последнего запуска. Во-вторых, он посмотрел на объектный кеш sql. Если объект в таблице был указан в кэше, он был помечен в таблице как недавно просмотренный. используется.

В конце шестимесячного периода или любого другого содержимого таблицы были проверены. На все объекты в таблице, на которые не было замечено ссылок, с тех пор, как я начал мониторинг, вероятно, было безопасно выполнять резервное копирование и удаление.

Конечно, существует возможность использования объектов, скажем, один раз в год или как угодно, но, похоже, это работает по большей части.

Работать с этим было немного больно.

Я работаю с полудюжиной баз данных, большинство из которых имеют тонны устаревших таблиц, которые остаются еще долго после того, как их первоначальные создатели перешли в другие компании.

Я ищу достаточно надежный метод отслеживания того, когда вызывается объект (таблица, представление, хранимая процедура или функция).

Для тех из вас, кто в настоящее время отслеживает подобные вещи, каким методом / кодом вы пользуетесь, и вы бы порекомендовали его?

Это было полезно?

Решение

В SQL Server 2005 вы можете использовать динамическое представление управления sys.dm_db_index_usage_stats. Название говорит «индекс» но это немного вводит в заблуждение - каждая таблица имеет здесь запись, даже если она не имеет индексов. Вот полезный запрос из журнала 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

Вот оригинальная статья:

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

Имейте в виду, что эти статистические данные об использовании сбрасываются при перезапуске SQL Server.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top