powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перекомпиляция хранимых процедур
36 сообщений из 36, показаны все 2 страниц
Перекомпиляция хранимых процедур
    #37260836
FullZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некий достаточно сложный и объемный процесс расчетов, который разделен на несколько хранимых процедур, которые в зависимости от внешних условий вызываются в различных комбинациях и в различной последовательности... Условно пусть будет так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
stored procedure AAA
begin
  Какой-то select
  Какой-то update
  execute procedure BBB
  Какой-то select
  Какой-то delete
  execute procedure CCC;
end

Вопрос в следующем: при перекомпиляции процедуры BBB или CCC (любой из "внутренних") происходит ли перекомпиляция и процедуры AAA ("внешней")? Или после компиляции "внутренних" процедур, нужно перекомпилировать руками и "внешние" процедуры?
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260838
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FullZeroпри перекомпиляции процедуры BBB или CCC (любой из "внутренних") происходит ли
перекомпиляция и процедуры AAA ("внешней")?

Нет, конечно. А зачем?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260841
FullZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

да кая-то хрень происходит...
в какой-то момент времени "внешняя" процедура начинает считать что-то совершенно непонятное... причем если проходить в IBE в отладчике пошагово - получаем ожидаемые результаты, если просто execute procedure - что-то неосмысливаемое... а вот после перекомпиляции в том же IBE _всех_ процедур - и execute procedure начинает считать правильно...
за два месяца периодичски приходится менять "внутренние" процедуры (внешние не трогаются вообще никак), после чего "внешние" начинают лажать...
системы пока выявить не удалось:(
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260842
FullZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл уточнить - все происходит под Firebird-2.5.0.26074
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, в 2.5 всякая хрень возможна. Там отслеживание зависимостей поломано.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260864
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перекомпиляция автоматом не делается, конечно.
Но поскольку валидность может быть (будет?)
сброшена, перекомпиляция может потребоваться.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260871
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

трекер об этом знает?
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260882
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrтрекер об этом знает?
Это считается фичей, так что...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37260886
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа пора придумывать объективные критерии по которым будем отличать фичи от багов? :)
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261084
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА, в 2.5 всякая хрень возможна. Там отслеживание зависимостей поломано.
Значит есть надежда, что в будущем все будет намана? У меня уже в привычку вошло перекомпилять все зависимые процедуры, так как натыкался на похожие грабли, что и у автора.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261127
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exterisтак как натыкался на похожие грабли, что и у автора.Да ладно, чего вы чепуху городите? Хоть один воспроизводимый пример есть?

P.S. А-то напугали, блин, я до сих пор не перекомпилировал без надобности.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261138
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЭто считается фичей, так что...
ты в очередной раз бредишь
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261147
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrты в очередной раз бредишь
http://tracker.firebirdsql.org/browse/CORE-3303
Здесь Шон меня пытается убедить, что инвалидные процедуры это фича.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261153
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

угу, а остальное ты додумал. Например, что перекомпиляция одной процедуры всегда инвалидирует зависящую. И что со времен ФБ 1.0 что-то поменялось на этот счет. И что это "всякая хрень" и "поломано".
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261166
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrDimitry Sibiryakov,

угу, а остальное ты додумал. Поправочка. Остальное он добредил :)
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261180
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в 1.* не было никаких флагов валидности.
И перекомпиляция не требовалась.
И процедуры вполне запускались после
изменения других зависимостей. И в 2.5 вроде
не требуется, за некоторым исключением.

Или как?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261200
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
единственная разница ФБ 2.1 и выше от предыдущих версий касается изменения доменов, используемых в процедурах/триггерах. Раньше при этом ничего не происходило и о несовместимых изменениях узнавали в рантайме при следующем парсинге этих процедур/триггеров. Сейчас сервер пытается сразу перекомпилировать зависимости этого домена. При неудаче сбрасывает флаг RDB$VALID_BLR у соответствующих объектов. Все остальное работает как раньше.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261204
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОстальное он добредил :)
Наличие флага VALID_BLR означает, что BLR может быть инвалидным. Появление инвалидного BLR
означает, что сервер позволяет выполнить транзакцию, приводящую BLR в инвалидное
состояние. Позволять выполнить такую транзакцию означает ослабление контроля за
целостностью метаданных.

Какое утверждение в этой цепочке считается бредом?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261225
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovhvladОстальное он добредил :)
...
Какое утверждение в этой цепочке считается бредом?
Тебе dimitr выше чётко написал.

Ты сам себе придумал эту цепочку. Реальность иная.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261232
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> единственная разница ФБ 2.1 и выше от предыдущих версий касается изменения доменов,

Именно. И это не касается сабжа, ибо у автора зависимости ХП, а не доменов.

DS> Какое утверждение в этой цепочке считается бредом?

Это касается только доменов. Но не всего остального.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #37261243
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЭто касается только доменов. Но не всего остального.
плюс, как я уже написал, даже для доменов никакого "ослабления" не было. Раньше это вообще не проверялось и нехорошие DDL-транзакции спокойно коммитились.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Перекомпиляция хранимых процедур
    #38885035
Oleg0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем! апну тему: Firebird 2.5.3, создаем две процедуры:

create or alter procedure ADM_SUB1
returns (
RES integer)
as
begin
res=1;
suspend;
end

create or alter procedure ADM_MAIN
returns (
RESMAIN integer)
as
begin
select res from adm_sub1 into RESMain;
suspend;
end

Запускаем Select * from ADM_MAIN - результат 1. Пока всё правильно.
Меняем в процедуре ADM_SUB1 res=1 на res=2, компилируем.
Запускаем Select * from ADM_MAIN - результат ОПЯТЬ 1 !!!
и ЭТО НЕ БАГ??? (ADM_MAIN перекомпилил-опять все ОК, конечно)
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885050
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
курить про кэширование метаданных.

Общее правло: все метаданные меняем монопольно, после коммита всех изменений, поднимаем коннект и делаем в нем селекты, апдейты и прочие операции с данными.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885052
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg0kи ЭТО НЕ БАГ??? (ADM_MAIN перекомпилил-опять все ОК, конечно)
Если отрубишь всех пользователей от базы, после этого сам переконектишся
Запустишь Select * from ADM_MAIN и результат будет ОПЯТЬ 1 !!!
то тогда ответ на вопрос будет положительный
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885200
Oleg0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky... все метаданные меняем монопольно...
А если юзеров человек 50 сидит-и каждый что-то делает, а сделать надо срочно? в FB 1.5 - всё работало сразу, без перекомпиляций
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885219
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg0kА если юзеров человек 50 сидит-и каждый что-то делает, а сделать надо срочно? в FB 1.5 - всё работало сразу, без перекомпиляций
Ну на свой страх и риск.
зы. IBExpert в руки, устнавливаешь флаг перекомпиляции зависящих процедур в настройках и вперед
ззы. На класике может не прокатить
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885235
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg0kв FB 1.5 - всё работало сразу, без перекомпиляций
не надо ля-ля. это работало так же, как и сейчас. В доке по IB 5.x был спец-пункт - Altering and dropping procedures in use.
datadef.pdf, страница 153. ~1998 год.

Altering or dropping a stored procedure takes effect immediately; new requests that invoke the altered stored procedure see the latest version . However, outstanding requests continue to see the version of the stored procedure that they first saw , even if a newer version has been created after the request’s first invocation of the stored procedure. There is no method to force these outstanding requests to update their metadata cache.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885236
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg0kА если юзеров человек 50 сидит-и каждый что-то делает, а сделать надо срочно?
бредет путник по пустыне, нашел лампу, трет, там джинн
-Джинн, хочу домой!
-Ну пошли, нам туда.
-А мне надо быстро!!!
-Ну тогда побежали.
Oleg0kв FB 1.5 - всё работало сразувраки.(хотя может суперсервер так и ведет себя?)
Oleg0kбез перекомпиляцийты перекомпиляцию с реконнектом клиента в кучу не собирай, это разное.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38885259
Oleg0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvOleg0kв FB 1.5 - всё работало сразу, без перекомпиляций
не надо ля-ля. ...[/i]
Надо.
Проверил на FB 1.5.6 именно этот пример - ADM_MAIN - выдаёт СРАЗУ другой результат из ADM_SUB - БЕЗ её перекомпиляции
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38886301
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg0kПроверил на FB 1.5.6 именно этот пример - ADM_MAIN - выдаёт СРАЗУ другой результат из ADM_SUB - БЕЗ её перекомпиляции
перекомпиляция вызывающей процедуры роли не играет. Ты просто не умеешь тестировать, и выполняешь разные действия, получая разный результат.
Если ты не можешь перевести гугл транслэйтом то, что я привел, тогда объясняю:
- при вызове процедуры она загружается в кэш метаданных (плюс все вероятно вызываемые при этом процедуры и триггеры).
До тех пор, пока она висит в кэше метаданных, перекомпиляция этой процедуры в других коннектах никак не перегружает кэш метаданных. Соответственно, другие коннекты результат перекомпилированной процедуры не увидят.
Коннект, который перекомпилирует процедуру, увидит ее новый результат.
Есть две архитектуры - классик и суперсервер. У классика кэш метаданных свой на каждый коннект, у супера - общий кэш метаданных.
В классике, чтобы увидеть изменения процедуры (если она уже вызывалась в этом коннекте), нужно сделать переконнект. То есть, убить старый коннект и кэш метаданных, и открыть новый коннект с новым кэшем метаданных.
В супере - изменения процедуры не будут видны старым коннектам до тех пор, пока не отключится последний, который вызывал эту процедуру.

Так работает кэш метаданных с IB 5.x, по крайней мере в суперсервере. В классике он так и раньше работал. Firebird 1.5 ничего нового, как и другие версии Firebird, сюда не внес (кроме кое-каких вещей по синхронизации кэша метаданных, и блокирования изменяемых метаданных, которые в кэше).
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38886313
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

все не совсем (совсем не?) так, на самом деле оно несколько сложнее. В кеше могут торчать несколько версий процедуры одновременно. Время жизни кешированной версии привязано не к коннекту, а к запросам/транзакциям этого коннекта. Уже препарированные запросы никогда не увидят новой версии процедуры. А вот вновь препарируемые должны увидеть сразу, особенно в супере. Но до 2.5 были разные баги на этот счет и поведение могло плавать от версии к версии.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38886411
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> вновь препарируемые должны увидеть сразу, особенно в супере

А в классике?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38886426
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

должны и в классике тоже, но до 2.5 не поручусь, мог и требоваться переконнект.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38886428
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно, переконнект (т.е. сброс кеша), чаще всего нужен в случае кроссзависимых процедур. Ибо даже если что-то мы поменяли, но оно используется другими процедурами в кеше, которые используются еще чем-то и вот этот самый "что-то" относится к отпрепаренному запросу... тут проще переконнектиться, чем вычислить что именно держит старую копию процедуры.
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38886431
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> собственно, переконнект (т.е. сброс кеша), чаще
dimitr> всего нужен в случае кроссзависимых процедур

Я собсно про это и спрашиваю - раньше была мантра
(у меня, по крайней мере) - обновление - реконнект.
При чём не только для кроссов, но и для более простых
вариантов и цепочек, хотя по зрелом рассуждении и
зная как движок препарит и выполняет запросы/ХП -
может, это и был контрацептив на свечку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перекомпиляция хранимых процедур
    #38887671
Oleg0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, ну прогоните тест (кому это интересно) с этими двумя процедурами - на FB 1.5.6 и на FB 2.5.3 - базы полигон-один коннект из IBExperta
- при изменении ADM_SUB1 - для 1.5 - НЕ ТРЕБУЕТСЯ НИ РЕКОННЕКТ к базе, ни перекомпиляция-результат СРАЗУ правильный
для 2.5 надо ЛИБО реконнект, ЛИБО рекомпил. ADM_MAIN.
Доку прочитал-без гугл транслейта всё понятно.
Мне не очень интересно разбираться с кешем и архитектурами (хотя-читал,знаю), просто странное поведение-в других БД такого не встречал. ВСЁ.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перекомпиляция хранимых процедур
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]