|
|
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Есть некий достаточно сложный и объемный процесс расчетов, который разделен на несколько хранимых процедур, которые в зависимости от внешних условий вызываются в различных комбинациях и в различной последовательности... Условно пусть будет так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Вопрос в следующем: при перекомпиляции процедуры BBB или CCC (любой из "внутренних") происходит ли перекомпиляция и процедуры AAA ("внешней")? Или после компиляции "внутренних" процедур, нужно перекомпилировать руками и "внешние" процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 19:38 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
FullZeroпри перекомпиляции процедуры BBB или CCC (любой из "внутренних") происходит ли перекомпиляция и процедуры AAA ("внешней")? Нет, конечно. А зачем? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 19:40 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, да кая-то хрень происходит... в какой-то момент времени "внешняя" процедура начинает считать что-то совершенно непонятное... причем если проходить в IBE в отладчике пошагово - получаем ожидаемые результаты, если просто execute procedure - что-то неосмысливаемое... а вот после перекомпиляции в том же IBE _всех_ процедур - и execute procedure начинает считать правильно... за два месяца периодичски приходится менять "внутренние" процедуры (внешние не трогаются вообще никак), после чего "внешние" начинают лажать... системы пока выявить не удалось:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 19:52 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
забыл уточнить - все происходит под Firebird-2.5.0.26074 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 19:54 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
А, в 2.5 всякая хрень возможна. Там отслеживание зависимостей поломано. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 20:04 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Перекомпиляция автоматом не делается, конечно. Но поскольку валидность может быть (будет?) сброшена, перекомпиляция может потребоваться. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 20:42 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, трекер об этом знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 20:57 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
dimitrтрекер об этом знает? Это считается фичей, так что... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 21:18 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Типа пора придумывать объективные критерии по которым будем отличать фичи от багов? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2011, 21:32 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА, в 2.5 всякая хрень возможна. Там отслеживание зависимостей поломано. Значит есть надежда, что в будущем все будет намана? У меня уже в привычку вошло перекомпилять все зависимые процедуры, так как натыкался на похожие грабли, что и у автора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 10:10 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Exterisтак как натыкался на похожие грабли, что и у автора.Да ладно, чего вы чепуху городите? Хоть один воспроизводимый пример есть? P.S. А-то напугали, блин, я до сих пор не перекомпилировал без надобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 11:29 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЭто считается фичей, так что... ты в очередной раз бредишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 11:52 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
dimitrты в очередной раз бредишь http://tracker.firebirdsql.org/browse/CORE-3303 Здесь Шон меня пытается убедить, что инвалидные процедуры это фича. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 12:18 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, угу, а остальное ты додумал. Например, что перекомпиляция одной процедуры всегда инвалидирует зависящую. И что со времен ФБ 1.0 что-то поменялось на этот счет. И что это "всякая хрень" и "поломано". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 12:24 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
dimitrDimitry Sibiryakov, угу, а остальное ты додумал. Поправочка. Остальное он добредил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 12:48 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Так в 1.* не было никаких флагов валидности. И перекомпиляция не требовалась. И процедуры вполне запускались после изменения других зависимостей. И в 2.5 вроде не требуется, за некоторым исключением. Или как? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 13:11 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
единственная разница ФБ 2.1 и выше от предыдущих версий касается изменения доменов, используемых в процедурах/триггерах. Раньше при этом ничего не происходило и о несовместимых изменениях узнавали в рантайме при следующем парсинге этих процедур/триггеров. Сейчас сервер пытается сразу перекомпилировать зависимости этого домена. При неудаче сбрасывает флаг RDB$VALID_BLR у соответствующих объектов. Все остальное работает как раньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 13:34 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
hvladОстальное он добредил :) Наличие флага VALID_BLR означает, что BLR может быть инвалидным. Появление инвалидного BLR означает, что сервер позволяет выполнить транзакцию, приводящую BLR в инвалидное состояние. Позволять выполнить такую транзакцию означает ослабление контроля за целостностью метаданных. Какое утверждение в этой цепочке считается бредом? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 13:38 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovhvladОстальное он добредил :) ... Какое утверждение в этой цепочке считается бредом? Тебе dimitr выше чётко написал. Ты сам себе придумал эту цепочку. Реальность иная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 13:52 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
dimitr> единственная разница ФБ 2.1 и выше от предыдущих версий касается изменения доменов, Именно. И это не касается сабжа, ибо у автора зависимости ХП, а не доменов. DS> Какое утверждение в этой цепочке считается бредом? Это касается только доменов. Но не всего остального. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 13:58 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамЭто касается только доменов. Но не всего остального. плюс, как я уже написал, даже для доменов никакого "ослабления" не было. Раньше это вообще не проверялось и нехорошие DDL-транзакции спокойно коммитились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2011, 14:08 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Доброго дня всем! апну тему: 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 перекомпилил-опять все ОК, конечно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:22 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
курить про кэширование метаданных. Общее правло: все метаданные меняем монопольно, после коммита всех изменений, поднимаем коннект и делаем в нем селекты, апдейты и прочие операции с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:32 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Oleg0kи ЭТО НЕ БАГ??? (ADM_MAIN перекомпилил-опять все ОК, конечно) Если отрубишь всех пользователей от базы, после этого сам переконектишся Запустишь Select * from ADM_MAIN и результат будет ОПЯТЬ 1 !!! то тогда ответ на вопрос будет положительный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:33 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Ivan_Pisarevsky... все метаданные меняем монопольно... А если юзеров человек 50 сидит-и каждый что-то делает, а сделать надо срочно? в FB 1.5 - всё работало сразу, без перекомпиляций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:08 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Oleg0kА если юзеров человек 50 сидит-и каждый что-то делает, а сделать надо срочно? в FB 1.5 - всё работало сразу, без перекомпиляций Ну на свой страх и риск. зы. IBExpert в руки, устнавливаешь флаг перекомпиляции зависящих процедур в настройках и вперед ззы. На класике может не прокатить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:22 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:35 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Oleg0kА если юзеров человек 50 сидит-и каждый что-то делает, а сделать надо срочно? бредет путник по пустыне, нашел лампу, трет, там джинн -Джинн, хочу домой! -Ну пошли, нам туда. -А мне надо быстро!!! -Ну тогда побежали. Oleg0kв FB 1.5 - всё работало сразувраки.(хотя может суперсервер так и ведет себя?) Oleg0kбез перекомпиляцийты перекомпиляцию с реконнектом клиента в кучу не собирай, это разное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:38 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
kdvOleg0kв FB 1.5 - всё работало сразу, без перекомпиляций не надо ля-ля. ...[/i] Надо. Проверил на FB 1.5.6 именно этот пример - ADM_MAIN - выдаёт СРАЗУ другой результат из ADM_SUB - БЕЗ её перекомпиляции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 17:04 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Oleg0kПроверил на FB 1.5.6 именно этот пример - ADM_MAIN - выдаёт СРАЗУ другой результат из ADM_SUB - БЕЗ её перекомпиляции перекомпиляция вызывающей процедуры роли не играет. Ты просто не умеешь тестировать, и выполняешь разные действия, получая разный результат. Если ты не можешь перевести гугл транслэйтом то, что я привел, тогда объясняю: - при вызове процедуры она загружается в кэш метаданных (плюс все вероятно вызываемые при этом процедуры и триггеры). До тех пор, пока она висит в кэше метаданных, перекомпиляция этой процедуры в других коннектах никак не перегружает кэш метаданных. Соответственно, другие коннекты результат перекомпилированной процедуры не увидят. Коннект, который перекомпилирует процедуру, увидит ее новый результат. Есть две архитектуры - классик и суперсервер. У классика кэш метаданных свой на каждый коннект, у супера - общий кэш метаданных. В классике, чтобы увидеть изменения процедуры (если она уже вызывалась в этом коннекте), нужно сделать переконнект. То есть, убить старый коннект и кэш метаданных, и открыть новый коннект с новым кэшем метаданных. В супере - изменения процедуры не будут видны старым коннектам до тех пор, пока не отключится последний, который вызывал эту процедуру. Так работает кэш метаданных с IB 5.x, по крайней мере в суперсервере. В классике он так и раньше работал. Firebird 1.5 ничего нового, как и другие версии Firebird, сюда не внес (кроме кое-каких вещей по синхронизации кэша метаданных, и блокирования изменяемых метаданных, которые в кэше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 11:07 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
kdv, все не совсем (совсем не?) так, на самом деле оно несколько сложнее. В кеше могут торчать несколько версий процедуры одновременно. Время жизни кешированной версии привязано не к коннекту, а к запросам/транзакциям этого коннекта. Уже препарированные запросы никогда не увидят новой версии процедуры. А вот вновь препарируемые должны увидеть сразу, особенно в супере. Но до 2.5 были разные баги на этот счет и поведение могло плавать от версии к версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 11:19 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
dimitr> вновь препарируемые должны увидеть сразу, особенно в супере А в классике? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 14:09 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, должны и в классике тоже, но до 2.5 не поручусь, мог и требоваться переконнект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 14:50 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
собственно, переконнект (т.е. сброс кеша), чаще всего нужен в случае кроссзависимых процедур. Ибо даже если что-то мы поменяли, но оно используется другими процедурами в кеше, которые используются еще чем-то и вот этот самый "что-то" относится к отпрепаренному запросу... тут проще переконнектиться, чем вычислить что именно держит старую копию процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 14:55 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
dimitr> собственно, переконнект (т.е. сброс кеша), чаще dimitr> всего нужен в случае кроссзависимых процедур Я собсно про это и спрашиваю - раньше была мантра (у меня, по крайней мере) - обновление - реконнект. При чём не только для кроссов, но и для более простых вариантов и цепочек, хотя по зрелом рассуждении и зная как движок препарит и выполняет запросы/ХП - может, это и был контрацептив на свечку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 15:06 |
|
||
|
Перекомпиляция хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Народ, ну прогоните тест (кому это интересно) с этими двумя процедурами - на FB 1.5.6 и на FB 2.5.3 - базы полигон-один коннект из IBExperta - при изменении ADM_SUB1 - для 1.5 - НЕ ТРЕБУЕТСЯ НИ РЕКОННЕКТ к базе, ни перекомпиляция-результат СРАЗУ правильный для 2.5 надо ЛИБО реконнект, ЛИБО рекомпил. ADM_MAIN. Доку прочитал-без гугл транслейта всё понятно. Мне не очень интересно разбираться с кешем и архитектурами (хотя-читал,знаю), просто странное поведение-в других БД такого не встречал. ВСЁ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 19:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563005]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
197ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 564ms |

| 0 / 0 |
