Страница 1 из 2

Хранимые процедуры в базе = загадка

Добавлено: 31 мар 2009, 11:53
ilshat
Давно хотел спросить: в чем тайный смысл хранимок в mssql-ой базе Галки? Их там просто неимоверное количество. Имена не поддаются объяснению: DT0000000000000000000000000005 и т.д. и т.п. И как я понял практически внутри всех "тупо" select-ы живут. Зачем они?

p.s. отсутствию комментариев в объектах БД не удивляюсь уже :(

Добавлено: 31 мар 2009, 11:56
Алексей
ИМХО заметил такую вещь, по крайней мере на MSSQL
Пишу новый интерфейс, подключаего его к БД и при первом его запуске логическая таблица бывает долго строится.
При повторных запусках ускорение существенное.
Возможно причина кроется как раз в этих хранимых процедурах?

Добавлено: 31 мар 2009, 12:04
m0p3e
Есть и другая сторона у этих хранимок. После изменения выборки в существующем интерфейсе данные показывает от фонаря. Долго бился... Уже почти поверил, что с ума сошел... Потом посморел в лог драйвера MSSQL-ого, а там ругань на DT...кучацифров. После удаления все заработало. Повторялось подобное еще 3-4 раза.

Добавлено: 01 апр 2009, 07:09
Алексей
хм. это надо разработчикам, чтобы поправили, т.к. это серьёзный косяк!

Добавлено: 01 апр 2009, 12:32
galover
Алексей
это для вас косяк, для разработчиков это мегафича

Добавлено: 01 апр 2009, 12:41
ilshat
Так в чем же смысл этой МЕГА-фичи? Выборки оптимизированные под интерфейсы что ли?

Добавлено: 01 апр 2009, 13:03
galover
ilshat
да шучу я, без понятия в чем там смысл. Просто пообщавшись с ТП и разработчиками сделал заключение - все баги могут быть легко перекованы в фичи

Добавлено: 20 окт 2009, 10:59
SNET
Присоединяюсь к вопросу, насколько безболезненно можно грохнуть весь этот бардак при использовании 2005 MS SQL? Ибо ждать 15-20 минут открытия дерева с ХП сильно утомляет.

Добавлено: 20 окт 2009, 11:22
LaaLaa
Нельзя их грохать. Галактика после этого не будет работать.

Таким образом пытались когда то давно оптимизировать компиляцию запросов для древних версий MS SQL Server. Для текущих версий MS SQL Server есть конечно другие способы. Не тем не менее, пока еще в Галктике эти хранимки все еще нужны.

Добавлено: 20 окт 2009, 11:26
Den
Грохнуть то можно.

select 'drop procedure '+name from sysobjects where xtype = 'P' and name like '__0___________________________'
union
select 'delete from xx$hashvalues'


Только они все равно потом пересоздадуться в процессе работы эти самые динамические хранимки. Плодит их нап в процессе работы. Но толком помоему так никто и не знает есть ли смысл их периодически очищать или нет )

Добавлено: 20 окт 2009, 11:40
Polimer
Недавно на тестовой убивал г. ХП с помощью запроса присланного из ТП. Проверял одну версию. Г. потом нормально работала.

Код: Выделить всё

declare @procedures CURSOR
set @procedures = CURSOR FOR
select name from sysobjects
where substring(name,1,3) in ('DT0','EQ0', 'FT0', 'GE0', 'GR0', 'LE0', 'LS0', 'LT0', 'ML0', 'NT0', 'PS0', 'RE0')
order by name
declare @proc varchar(30)
OPEN @procedures
FETCH NEXT FROM @procedures INTO @proc
WHILE (@@FETCH_STATUS <> -1)
BEGIN
print 'drop procedure ' + @proc
EXEC ('drop procedure ' + @proc)
FETCH NEXT FROM @procedures INTO @proc
END
DEALLOCATE @procedures 

Добавлено: 20 окт 2009, 12:45
SNET
Алексей писал(а):ИМХО заметил такую вещь, по крайней мере на MSSQL
Пишу новый интерфейс, подключаего его к БД и при первом его запуске логическая таблица бывает долго строится.
При повторных запусках ускорение существенное.
Возможно причина кроется как раз в этих хранимых процедурах?
Нет, процедуры тут ни при чем - элементарное отсутствие повторного парсинга, и кэширование плана исполнения. Это всё делается самим сервером.

Добавлено: 20 окт 2009, 13:14
SNET
Ради интереса на экспериментальной базе попробовали удалить все эти странные ХП. Получилось, галка осталась работоспособной, однако эти процедуры, действительно, на глазах генерируются снова.
Пришли к выводу, что проще свои ХП хранить в отдельной схеме с последующим доступом по полному идентификатору.
:sad:

Добавлено: 20 окт 2009, 13:38
sim
LaaLaa писал(а):Нельзя их грохать. Галактика после этого не будет работать..
Почему нельзя то? Например, в инструкции по переносу БД на другой сервер это гроханье является штатным условием.
Цитирую:
12) Удалить в Enterprise Manager все динамические хранимые процедуры восстановленной базы данных (Stored Procedures) с префиксами:
DT, EQ, FT, GE, GR, LE, LS, LT, ML, NT, PS, RE
Скрипт для удаления хранимых процедур может быть получен путем выполнения в восстановленной базе данных запроса:
select 'drop procedure '+name from sysobjects where xtype = 'P' and name like '__0___________________________'

Добавлено: 20 окт 2009, 14:13
SNET
sim
Да я просто хотел удалить их для более удобной работы с деревом ХП, т.к. мы в процессе эксплуатации "Галактики" (пока еще тестовой) пришли к выводу что некоторые типы отчетов, быстрее и много удобнее получать самописным приложением с использованием ХП.
А смысл удаления этого мусора получается не большой, ибо через пару часов работы там все становится на свои места :)