Три очень быстрых шага, чтобы начать работу:
1)
USE DatabaseName
SELECT [TableName] = OBJECT_NAME(object_id),
last_user_update, last_user_seek, last_user_scan, last_user_lookup
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID('DatabaseName')
Расскажет вам, когда в последний раз использовался каждый индекс, включая кластерный индекс. Так что, по крайней мере, вы сможете понять, к каким таблицам обращаются (а какие нет).
2) Включите сеанс расширенных событий (или трассировку профилировщика на стороне сервера, если вы используете pre-SQL 2012) примерно на час во время использования приложения. Вы также можете попросить пользователя выполнить различные действия в приложении в определенном порядке, чтобы вы могли соотнести его с трассировкой / сеансом.
Полезное предложение: если вы можете вообще изменить строку подключения, используемую приложением, добавьте «; Application Name = AppNameGoesHere», чтобы вы могли запустить фильтрацию трассировки для этого конкретного имени приложения. Хорошая практика в любом случае.
3) Получить версию приложения, работающую на непроизводственном сервере. Разработайте список поведенческих тестов для приложения («Когда пользователь нажимает кнопку« Создать элемент », он создает новый элемент для этого пользователя» и т. Д.). Начните мягкое удаление объектов, которые, по вашему мнению, не имеют никакого отношения к тестам, переименовав их. (Я использую формат наподобие objectName_DEPRECATED_YYYYMMDD - с датой, являющейся днем, когда я планирую фактически удалить его.) Перепроверьте все ваши тесты.
Благодаря комбинации сеанса расширенных событий, DMV использования индекса и мягкого удаления вы сможете определить основные объекты, используемые приложением, и хорошее общее согласие относительно того, какой объект делает что.
Удачи!