|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
После использования селективной процедуры и коммита транзакции (RCRW), попытка CREATE OR ALTER PROCEDURE завершается с ошибкой. Вернее, ошибка появляется при попытке коммита новой RCRW транзакции, в котором выполнился без ошибок этот стейтмент. Текст ошибки: Cannot commit transaction: Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. lock conflict on no wait transaction. unsuccessful metadata update. object PROCEDURE "имя процедуры" is in use После этого делаю роллбэк. Перед этим всем (стартом транзакции для обновления процедуры) и после роллбэка её: 1. SELECT * FROM MON$TRANSACTIONS M WHERE M.MON$TRANSACTION_ID <> CURRENT_TRANSACTION (в IBE) показывает только ридонли транзакции (MON$READ_ONLY=1 у всех открытых) 2. В MON$STATEMENTS нет стейтментов с использованием этой процедуры. Вопрос: где еще смотреть? Да, с помощью "чистого IBE" повторить проблему не могу - делаю SELECT из процедуры, комит, CREATE OR ALTER..., комит - все отрабатывает отлично. Правда, если запустить мою программу и вызвать процедуру там - в IBE CREATE OR ALTER+коммит тоже не проходит с той же ошибкой. Т.ч. пока грешу на свой старый IBX, который что-то недозакрывает, видимо. Может, кто сталкивался. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 16:13 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRock, 1. абсолютно пофиг readonly или нет 2. нигде не посмотришь. YuRockТ.ч. пока грешу на свой старый IBX, который что-то недозакрывает, видимо. закрывать то он может и закрывает, а вот unprepare не делает ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 16:28 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRockon no wait transactionиспользую wait транзакцию. Да, я понимаю, что "выдергиваю табуретку из-под задницы сидящего", но тем не менее работает. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 16:39 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Симонов Денис1. абсолютно пофиг readonly или нет Да это я так, на всяк. случай написал. Симонов Денисзакрывать то он может и закрывает, а вот unprepare не делает А что должно делаться в unprepare? Я тут глянул, во всех объектах наследниках датасета моего IBX в деструкторе вызывается метод Unprepare, в нем - InternalUnPrepare, а в нем ничего толком не вызывается - только очистка локальных буфферов: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т.е. никаких ф-ций клиента не вызывается. А какая-то должна? Если да - какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:13 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Ivan_Pisarevskyиспользую wait транзакцию. Да, я понимаю, что "выдергиваю табуретку из-под задницы сидящего", но тем не менее работает. :) Блин. У меня так тоже заработало. Это мне не нравится ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:19 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRock, я имел ввиду http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes255.html#rnfb25-apiods-api-unprpr ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:21 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Симонов ДенисYuRock, я имел ввиду http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes255.html#rnfb25-apiods-api-unprpr А, ясно. У меня делается DSQL_drop - этого должно быть достаточно. Т.ч. это не должно влиять. Я ж говорю - стейтмента вообще нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:25 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRockIvan_Pisarevskyиспользую wait транзакцию. Да, я понимаю, что "выдергиваю табуретку из-под задницы сидящего", но тем не менее работает. :) Блин. У меня так тоже заработало. Это мне не нравится Может кто объяснить, что происходит? Как могут свойства транзакции wait/nowait влиять на object in use? Если транзакция, которая действительно его юзала, закоммитилась перед тем, как стартует новая? Вообще это глюк или фича? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:27 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRock, ну значит не оно. По идее не хватает таблицы мониторинга которая показывала что есть в кеше метаданных и используется ли оно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:28 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRock, вроде бы wait/nowait влияет только на то где выполняется CREATE OR ALTER PROCEDURE И это не только в 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:31 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Симонов ДенисYuRock, вроде бы wait/nowait влияет только на то где выполняется CREATE OR ALTER PROCEDURE И это не только в 3.0 Проблема только в 3.0 у меня появилась. На 2.1 и ниже не было. 2.5 не использовал. Да, если транзакцию, которая вызывает CREATE OR ALTER PROCEDURE, сделать wait - все начинает работать. Только как это объяснить, не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 17:36 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRockВообще это глюк или фича? Вот нашел в треккере пару ссылок: http://tracker.firebirdsql.org/browse/CORE-4016 (закрыто как дубликат) и http://tracker.firebirdsql.org/browse/CORE-3108 Но они, я так понял, для классика. А у меня SS. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 18:46 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRock, потому что в 3.0 в отличии от 2.x у SS нет общего кеша метаданных. Там только общий страничный кеш. Когда он будет сделан хз. Обещаний сделать в 4.0 не было ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 18:53 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Мда, вот еще такая история описана Дмитрием Емановым: https://sourceforge.net/p/firebird/mailman/message/32523570/ Правда на классике 2.5. И, по прочтению, так и не понятно, какое логическое отношение WAIT/NOWAIT имеет к object in use. Только такая фраза: All you need to do is to use a WAIT transaction to perform DDL for procedures (including ALTER PROCEDURE). When using a NOWAIT transaction to alter procedures, this is expected to get an "object in use" error. Dmitry ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 18:55 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Симонов Денисв 3.0 в отличии от 2.x у SS нет общего кеша метаданных. Там только общий страничный кеш. Да, я так уже и подумал. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 18:57 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
В общем, я так понял, wait для alter procedure - это давняя "фича", которая что-то дополнительно делает, благодаря чему и работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 19:04 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
Симонов ДенисYuRock, потому что в 3.0 в отличии от 2.x у SS нет общего кеша метаданных. Там только общий страничный кеш. Когда он будет сделан хз. Обещаний сделать в 4.0 не было небольшие уточнения 17749760 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 19:29 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
YuRockИ, по прочтению, так и не понятно, какое логическое отношение WAIT/NOWAIT имеет к object in use. локи метаданных кешируются коннектом. Т.е. даже если процедура уже не используется (use_count = 0), коннект все равно держит на нее SH-лок. Это оптимизация такая, чтобы снизить нагрузку на лок-менеджер. Отпускается оный лок по АСТу (читай: сигналу) от любого другого коннекта, который захочет взять несовместимый лок (при ALTER/DROP берется EX-лок). Вот только оный сигнал посылается лишь если лок берется с таймаутом. Если же NOWAIT (сиречь timeout = 0), то просто проверяется состояние в лок-таблице и возвращается облом. Ибо любой другой вариант взаимодействия с процессом А приведет к ненулевой задержке. Вот такая особенность реализации. Поэтому при WAIT все работает, а при NOWAIT - фигвам. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2016, 21:22 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
dimitr, Спасибо, раз это штатное поведение, то подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2016, 06:32 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
dimitr, А если use_count > 1, то что произойдет при обновлении в WAIT-транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2016, 09:34 |
|
проблема с CREATE OR ALTER PROCEDURE (в 3.0) - где смотреть?
|
|||
---|---|---|---|
#18+
CyberMaxА если use_count > 1, то что произойдет при обновлении в WAIT-транзакции? для таблицы - отлуп с "object in use". Для процедуры - обновление спокойно пройдет и создаст новую версию процедуры. Старая будет болтаться в памяти (и выполняться старыми скомпилированными запросами) до тех пор, пока ее счетчик использования не обнулится. После чего она будет прибита. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2016, 11:08 |
|
|
start [/forum/topic.php?fid=40&msg=39230534&tid=1562186]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 157ms |
0 / 0 |