В следующем году я помогаю очистить несколько сред SQL Server.
У нас есть около 10 000 хранимых процедур, и, по нашим оценкам, только около 1000 из них используются на регулярной основе, а еще около 200 используются в редких случаях, что означает, что у нас много работы.
Поскольку у нас есть несколько отделов и групп, которые могут получить доступ к этим базам данных и процедурам, мы не всегда являемся теми, кто вызывает процедуры, а это означает, что мы должны определить, какие процедуры вызываются. Кроме того, мы хотим определить это в течение нескольких месяцев, а не нескольких дней (что исключает некоторые возможности).
Один из подходов к этому состоит в том, чтобы использовать SQL Server Profiler
и отслеживать, какие процедуры вызываются, и сравнивать их со списком тех процедур, которые у нас есть, отмечая, используются ли эти процедуры или нет. С тех пор мы можем перенести процедуры в другую схему, если отдел кричит.
Является ли использование Profiler
наиболее эффективного подхода здесь? И / или кто-нибудь из вас сделал нечто подобное и нашел другой способ / лучший способ сделать это?
источник
Вы можете найти этот вопрос полезным, он относится к таблицам и столбцам, но предлагает использовать сторонний инструмент ApexSQL Clean, который также может найти неиспользуемые хранимые процедуры, а также все объекты, на которые не ссылается ни один другой объект в базе данных или во внешних базах данных.
Отказ от ответственности: я работаю на ApexSQL в качестве инженера службы поддержки
источник
unreferenced stored procedures
, вместо этого ОП хочет найти неиспользуемый СП. Ваш ответ не служит ответом на этот вопрос.Если вы используете SQL Server 2008+, вы также можете использовать расширенные события с целью гистограммы . Возможно, это будет более легкий вес, чем след.
AFAIK, вам нужно будет создать отдельный сеанс для каждой интересующей базы данных, хотя я не вижу никаких признаков того, что группирование по нескольким столбцам возможно. Быстрый пример ниже фильтров на
database_id=10
И затем после запуска некоторых хранимых процедур в этой БД несколько раз и извлечения данных с
Выход
Показывает, что процедура с
object_id
of1287675635
была выполнена, например, 36 раз. Этоasynchronous_bucketizer
только память, поэтому было бы лучше настроить что-то, что опрашивает это время от времени и сохраняет в постоянное хранилище.источник
WHERE (source_database_id IN (10,15,20))
но, увы, это не поддерживается.object_id
(или одинаковымиobject_name
) в разных базах данных отдельно, и я не думаю, что это возможно.extended events
где добавить в 2012 году, а не 2008?Как продолжение к сценарию Кин. Вот простой скрипт для создания таблицы для отслеживания использования с течением времени и скрипт для его периодического обновления.
источник
В этом посте также представлен скрипт для поиска неиспользуемых объектов. Поиск неиспользуемых таблиц базы данных в SQL Server. Ниже приведен скрипт из этой статьи. Я изменил тип таблицы «U» на тип хранимой процедуры «P»:
источник