Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 проверка, какие процедуры устарели  [new]
Ivanich87
Member

Откуда:
Сообщений: 145
Добрый день.
Такой вопрос, в базе накопилось примерно 800 хранимых процедур, наверное треть - это уже устаревшие никому не нужные процедуры.
Как можно получить список процедур, которые не запускались уже полгода??
22 ноя 13, 16:42    [15175643]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Ivanich87,

1. начать вести журнал запуска процедур
2. через полгода сравнить журнал со списком имеющихся процедур
22 ноя 13, 17:04    [15175813]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Ivanich87
Member

Откуда:
Сообщений: 145
Shakill
Ivanich87,

1. начать вести журнал запуска процедур
2. через полгода сравнить журнал со списком имеющихся процедур


я надеялся что такое можно получить системными хранимыми процедурами.
Чтобы вести журнал нужно добавить в каждую хп что то типа:
INSERT INTO Temp_Shell_StoredProcedure(ProcedureName) select object_name(@@procid)

Как это сделать?
22 ноя 13, 17:08    [15175853]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
zindur
Member

Откуда:
Сообщений: 86
SELECT 
      p.name AS SP_Name 
    , s.last_execution_time
FROM sys.procedures AS p
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS s ON p.object_id = s.object_id
ORDER BY s.last_execution_time
       , p.name;
22 ноя 13, 21:41    [15177118]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
zindur
SELECT 
      p.name AS SP_Name 
    , s.last_execution_time
FROM sys.procedures AS p
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS s ON p.object_id = s.object_id
ORDER BY s.last_execution_time
       , p.name;

sys.dm_exec_procedure_stats
When a stored procedure is removed from the cache, the corresponding row is eliminated from this view
22 ноя 13, 22:33    [15177249]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Ivanich87
Member

Откуда:
Сообщений: 145
zindur
SELECT 
      p.name AS SP_Name 
    , s.last_execution_time
FROM sys.procedures AS p
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS s ON p.object_id = s.object_id
ORDER BY s.last_execution_time
       , p.name;

У меня sql 2005, там системной sys.dm_exec_procedure_stats, она только с 2008
23 ноя 13, 08:21    [15178213]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Ivanich87
Member

Откуда:
Сообщений: 145
Господа, неужели sql2005 нет стандартных процедур по статистике запуска ХП??
26 ноя 13, 08:43    [15189132]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Не понимаю, почему надо дропать процедуру, если её давно не вызывали?
Где логика?
Если бы надо было выявить процедуры, вызовов которой в системе не существует,
было бы понятно.
Что это за система такая, которой можно ампутировать объект, а ей хоть бы что?
26 ноя 13, 09:07    [15189224]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
iap
Что это за система такая, которой можно ампутировать объект, а ей хоть бы что?
Отказоустойчивая :-)
Ivanich87
Господа, неужели sql2005 нет стандартных процедур по статистике запуска ХП??
Ну что такого, в дельфи тоже стандартно у скомпилированного приложения нет статистики вызовов функций.
26 ноя 13, 09:45    [15189467]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ivanich87
неужели sql2005 нет стандартных процедур по статистике запуска ХП??

Не надо путать статистику с аудитом.
Если вы не озаботились включением аудита, то сервер за вас это делать не будет
26 ноя 13, 10:09    [15189592]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Ivanich87


Чтобы вести журнал нужно добавить в каждую хп что то типа:

Как это сделать?


alter procedure
26 ноя 13, 10:22    [15189648]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Ivanich87
Member

Откуда:
Сообщений: 145
iap
Не понимаю, почему надо дропать процедуру, если её давно не вызывали?
Где логика?
Если бы надо было выявить процедуры, вызовов которой в системе не существует,
было бы понятно.
Что это за система такая, которой можно ампутировать объект, а ей хоть бы что?

Это нормальная ситуация, когда старые процедуры заменяются новыми, структура БД тоже со временем изменяется. Таким образом постепенно накапливается мусор, от которого хотелось бы избавиться, но необходимо подстраховаться. Вот поэтому и нужна статистика, какие процедуры не запускались за последние полгода - год
26 ноя 13, 10:57    [15189837]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ivanich87
Это нормальная ситуация, когда старые процедуры заменяются новыми, структура БД тоже со временем изменяется

В нормальной ситуации процесс, "когда старые процедуры заменяются новыми" должен приводить к Decommissioning старых процедур. И делается это не на основании статистики использования, а на основании документации
26 ноя 13, 11:03    [15189886]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Ivanich87
iap
Не понимаю, почему надо дропать процедуру, если её давно не вызывали?
Где логика?
Если бы надо было выявить процедуры, вызовов которой в системе не существует,
было бы понятно.
Что это за система такая, которой можно ампутировать объект, а ей хоть бы что?

Это нормальная ситуация, когда старые процедуры заменяются новыми, структура БД тоже со временем изменяется. Таким образом постепенно накапливается мусор, от которого хотелось бы избавиться, но необходимо подстраховаться. Вот поэтому и нужна статистика, какие процедуры не запускались за последние полгода - год


Нормальная она только тогда, когда при создании новых одновременно удаляются старые.
26 ноя 13, 11:40    [15190131]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Ivanich87
Member

Откуда:
Сообщений: 145
WarAnt
Нормальная она только тогда, когда при создании новых одновременно удаляются старые.

Старые нельзя удалять в одночасье, так как вызов старой процедуры может производиться из интерфейса программы, а пользователей много, и у всех перезапустить программу для обновления невозможно...
26 ноя 13, 11:48    [15190200]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ivanich87
Старые нельзя удалять в одночасье, так как вызов старой процедуры может производиться из интерфейса программы,

А что тогда делает то процесс "когда старые процедуры заменяются новыми" ?

Ivanich87
а пользователей много, и у всех перезапустить программу для обновления невозможно...

Поэтому надо удалить "старую процедуру", а не обновить клиентскую программу? Пусть даже "вызов старой процедуры может производиться из интерфейса программы" ? Круто !
26 ноя 13, 11:51    [15190221]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Ivanich87
WarAnt
Нормальная она только тогда, когда при создании новых одновременно удаляются старые.

Старые нельзя удалять в одночасье, так как вызов старой процедуры может производиться из интерфейса программы, а пользователей много, и у всех перезапустить программу для обновления невозможно...
Принципиально вы всё делаете правильно, так и надо.

Но нужна более чёткая организация.

Должна быть привязка версий программы к используемым процедурам, и правила, когда спользование старой версии не допускается (а то ведь полгода не-использования не означает, что кто то не может запустить старую версию программы и получить баг).

Действительно, можно по простому сделать - логировать использование процедур и удалять неиспользуемые долго, но тогда логирование вам нужно сделать самому, в сиквеле (так же как в дельфи) не предусмотрено ведение лога вызовов процедур.
Glory
Ivanich87
Это нормальная ситуация, когда старые процедуры заменяются новыми, структура БД тоже со временем изменяется

В нормальной ситуации процесс, "когда старые процедуры заменяются новыми" должен приводить к Decommissioning старых процедур. И делается это не на основании статистики использования, а на основании документации
Это технически и организационно требует очень много ресурсов, хотя конечно теоретически так правильно. Для обычного заводика/торговой фирмочки на сотню рабочих мест это слишком круто, придётся к 3-м имеющимся сотрудникам на разработке взять ещё троих.
26 ноя 13, 12:04    [15190344]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
alexeyvg
Glory
пропущено...

В нормальной ситуации процесс, "когда старые процедуры заменяются новыми" должен приводить к Decommissioning старых процедур. И делается это не на основании статистики использования, а на основании документации
Это технически и организационно требует очень много ресурсов, хотя конечно теоретически так правильно. Для обычного заводика/торговой фирмочки на сотню рабочих мест это слишком круто, придётся к 3-м имеющимся сотрудникам на разработке взять ещё троих.

Если вы хотите создать с 0-ля свое ПО для совместной разработки программного кода, то придется в взять не 3, а 33 сотрудника.
А вот если взять уже созданное ПО, то можно никого дополнительно не брать.
26 ноя 13, 12:09    [15190384]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Glory
alexeyvg
Это технически и организационно требует очень много ресурсов, хотя конечно теоретически так правильно. Для обычного заводика/торговой фирмочки на сотню рабочих мест это слишком круто, придётся к 3-м имеющимся сотрудникам на разработке взять ещё троих.

Если вы хотите создать с 0-ля свое ПО для совместной разработки программного кода, то придется в взять не 3, а 33 сотрудника.
А вот если взять уже созданное ПО, то можно никого дополнительно не брать.
В смысле, не понял, про какое ПО идёт речь?

Или вы имеете в виду, что существует ПО для организации процесса разработки, которое всё это делает само, там предусмотрены разные настраиваемые шаблоны для описания своего варианта требований к поддержке ваерсий и их реализация?
Я честно говоря про такое не слышал, было бы интересно узнать...
26 ноя 13, 12:17    [15190461]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
alexeyvg
Или вы имеете в виду, что существует ПО для организации процесса разработки, которое всё это делает само, там предусмотрены разные настраиваемые шаблоны для описания своего варианта требований к поддержке ваерсий и их реализация?

ПО, которое готовит билд к инсталяции, есть. Билд может в себя включать и декомиссию объектов. Самой примитивной реализацие декомиссии может быть простое удаление объекта.
26 ноя 13, 12:20    [15190477]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Ivanich87,

Включить трассировку события "Performance Statistics", фильтровать по EventSubClass=1 и ObjectType=8272, смотреть колонки DatabaseID и ObjectID -- это покажет все процедуры которые компилились, а значит, хоть раз выполнялись на сервере. Включить трассировку события Object:Deleted (или смотреть в трассировке по умолчанию), фильтровать по EventSubClass=1, смотреть DatabaseID и ObjectID -- это покажет когда ID объекта потерял актуальность, т.е. позволит отфильтровывать удалённые объекты.
И анализировать... анализировать... анализировать...
А потом в процедуры, которые таким образом в морг определились, вставить вызов sys.sp_trace_generateevent вставить в TextData что-нить типа
<Event Class="ProcCall"><Schema>dbo</Schema><Name>Procedure</Name></Event>

и трассировать это событие, а дальше сам догадаесся. :)

PS: sys.sp_trace_generateevent полезно вставить во начале всех процедурок.
26 ноя 13, 12:24    [15190497]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Glory
alexeyvg
Или вы имеете в виду, что существует ПО для организации процесса разработки, которое всё это делает само, там предусмотрены разные настраиваемые шаблоны для описания своего варианта требований к поддержке ваерсий и их реализация?

ПО, которое готовит билд к инсталяции, есть. Билд может в себя включать и декомиссию объектов. Самой примитивной реализацие декомиссии может быть простое удаление объекта.
Ну это понятно, но вариант "процедура, не используемая в новой версии, немедленно удаляется" естественно не рассматривается. Это уж для совсем "наколенных" продуктов.

Требования к процессу у ТС такие (могу уверенно предполагать, потому что лет 20 придерживаюсь таких же принципов, ТС может только уточнить какие то количественные параметры):

- Раз в неделю выпускается повая версия ПО, с изменениями в клиентской и серверной части
- В новой версии может добавляться использование каких то новых таблиц, процедур, а использование чего то другого убираться...
- Старые версии клиента обязаны работать с новой версией БД (или сервера приложений, если такая архитектура) в рамках старой функциональности.
- Через какое то время (например, через полгода) старые версии клиента перестают работать на новой базе. Соответственно, старые процедуры нужно убирать, когда становится невалидным последний клиент, которых их использовал.

Совершенно нормальный, удобный для бизнеса, подход.
26 ноя 13, 13:11    [15190846]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
Glory
Member

Откуда:
Сообщений: 104760
alexeyvg
Ну это понятно, но вариант "процедура, не используемая в новой версии, немедленно удаляется"

Я говорил декомиссия. А удаление как самый примитивный способ декомиссии.
26 ноя 13, 13:14    [15190876]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
ART-CODE
Member

Откуда:
Сообщений: 1092
Не совсем понятно зачем постоянно новые процедуры делают люди, а не меняют существующие.
На выход процедура может давать набор данных.
Подхватить и правильно обработать изменившийся набор данных на клиенте - совсем не сложно.
Динамический интерфейс это просто.
А на вход процедура принимает некоторое кол-во параметров, ну и можно же продумать
стандартный набор входных параметров "с запасом" чтобы он перекрыл будущие потребности развития.
Таким образом, необходимость создания новой процедуры - будет исключительно редким случаем.

Да и клиента мякго рестартануть на обновление тоже не сложно.
Заминка в работе на пару секунд - и работает дальше с того же места.
26 ноя 13, 13:42    [15191156]     Ответить | Цитировать Сообщить модератору
 Re: проверка, какие процедуры устарели  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
ART-CODE
Таким образом, необходимость создания новой процедуры - будет исключительно редким случаем.
Вы всё правильно говорите, именно так и надо делать.

Но всё таки случаи удаления процедур неизбежно будут, пусть и очень редко, их тоже нужно отрабатывать.
Glory
alexeyvg
Ну это понятно, но вариант "процедура, не используемая в новой версии, немедленно удаляется"

Я говорил декомиссия. А удаление как самый примитивный способ декомиссии.
А, в этом смысле... А то слово мудрёное :-)

Так вот, я не вижу средств, например, в используемой мной Visual Studio-TFS для "не примитивной декомиссии" в соответствии с описанными выше требованиями.
Т.е. что бы связывать хранимую процедуру с местами в клиенте, где она используется, и отмечать как неиспользуемую через некоторое время.
26 ноя 13, 13:51    [15191235]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить