powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависание FB при удалении таблицы/поля
22 сообщений из 47, страница 2 из 2
Зависание FB при удалении таблицы/поля
    #39697557
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxhvladЗачем nowait ? Не надо nowait
Так если в wait, то сервер зависает.
Я тогда что-то не понял. При работе в FB 2.5 я модификацию метаданных всегда делал в nowait-транзакции. FB при коммите сразу же выдавал сообщение об ошибке, если что-то пошло не так. Здесь же из-за особенностей FB3 пришлось это делать в wait-транзакции и получилось, что в случае lock conflict - зависание.
Как тогда правильно?Указывать конечное время ожидания
Перечитай 21662490 и 21662579


CyberMaxhvladЧто такое повторный запуск ? В какой тр-ции ?
В IBExpert делаю выполнение этого же запроса (DROP TABLE IMP_TABLE) в этой же транзакции после неудачного предыдущего выполнения.Ну так таблица уже помечена как удаляемая (в кеше метаданных текущего коннекта). После роллбека пометка снимется.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697560
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисCyberMax,

попробуй провести эти эксперименты в isql, ибо IBExpert иногда наступает сам себе на...+1
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697570
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxМеня этот LC очень смущает. Ведь это означает, что есть какая-то конкурирующая транзакция. И я хочу выяснить, какая.Не обязательно тр-ция. Кеш метаданных удерживает блокировки объектов. Для этого не нужны тр-ции.

Счётчик использования объекта метаданных (таблицы, индекса и т.п.) инкрементируется в двух случаях
- при препарировании запроса
- при выполнении запроса в тр-ции

Соответственно декремент происходит при
- уничтожении препарированного запроса
- завершении тр-ции

Итого, блокировку объекта может удерживать не только тр-ция, но и факт существования препарированного запроса (который так или иначе использует объект)
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697581
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad]Не обязательно тр-ция. Кеш метаданных удерживает блокировки объектов. Для этого не нужны тр-ции.

Счётчик использования объекта метаданных (таблицы, индекса и т.п.) инкрементируется в двух случаях
- при препарировании запроса
- при выполнении запроса в тр-ции

Соответственно декремент происходит при
- уничтожении препарированного запроса
- завершении тр-ции

Итого, блокировку объекта может удерживать не только тр-ция, но и факт существования препарированного запроса (который так или иначе использует объект)
Тогда разрешите еще несколько вопросов:
1. Так как используется счетчик, нет возможности узнать, кто конкретно поставил блокировку?
2. В 3.0 кэш метаданных - раздельный. Каким образом увеличивается счетчик блокировок моего коннекта, если объект используется в другом коннекте?
3. Если транзакция завершается без уничтожения препарированного запроса - он уничтожится?
4. Блокировка действует в рамках транзакции. Или может быть такое, что активных транзакций нет, а блокировка - есть?
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697584
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

а ты до этого работал в 2.5 SS? Просто те у кого был CS/SC особенно ничего и не заметили при переходе на 3.0 SS. Привыкли уже.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697585
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса ты до этого работал в 2.5 SS?
Я во всех версиях работал только с SS.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697616
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax1. Так как используется счетчик, нет возможности узнать, кто конкретно поставил блокировку?Явно известно только в каком коннекте она используется.
Чтобы узнать точнее, нужно перебрать все запросы в кеше метаданных данного коннекта.

CyberMax2. В 3.0 кэш метаданных - раздельный. Каким образом увеличивается счетчик блокировок моего коннекта, если объект используется в другом коннекте?Никаким не увеличивается.

CyberMax3. Если транзакция завершается без уничтожения препарированного запроса - он уничтожится?Конечно нет. Запросом владеет тот, кто его создал - пользователь.
Системные запросы пока не обсуждаем.

CyberMax4. Блокировка действует в рамках транзакции. Или может быть такое, что активных транзакций нет, а блокировка - есть?Блокировка метаданных никак не привязана к области действия тр-ции.

Ещё раз. Есть объекты метаданных. Они загружаются в кеш метаданных по мере необходимости.

С каждым таким объектом связан existence lock (блокировка существования).
При загрузке объекта в кеш и до начала его использования берётся existence lock в shared (SH) режиме.
Каждый "пользователь" объекта метаданных инкрементирует счётчик использования объекта.
Пока счётчик не нулевой, existence lock не может быть отпущен.

Есть два вида таких пользователей - препарированный запрос и активная тр-ция.
Для того, чтобы удалить объект, нужно получить existence lock в exclusive (EX) режиме.
Чтобы его получить, все кеши должны отпустить свои SH блокировки.
Это невозможно, пока соотв. счётчики использования не нулевые.

Таким образом, пока есть препарированные запросы, заинтересованные в данном объекте, и пока жива хоть одна тр-ция,
в которой выполнялся подобный запрос, получить EX блокировку не удастся.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697632
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

ну с транзакциями всё понятно.
А вот возник такой вопрос, а можно ли сделать так чтобы при перекомпиляции объекта метаданных, связанные с ним препарированные запросы становились инвалидными и перепрепарировались как только эти запросы потребуются? Я не в смысле ближайшего будущего, а вообще теоретически.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697638
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениспопробуй провести эти эксперименты в isql, ибо IBExpert иногда наступает сам себе на...
В общем, перезашел в IBExpert и попытался удалить таблицу IMP_TABLE, к которой никто из пользователей не обращался. Не получилось. Начал выгонять пользователей по одному и пытаться удалить таблицу. По итогу всех выгнал, остался один, но таблица все равно не удалялась. Перезашел - и заработало. Тут же удалил соседнюю такую же проблемную таблицу.
Вариантов два:
1. IBExpert что-то не освобождает.
2. Firebird что-то не освобождает.
Попробую покопать вариант 1, т.к. проверить вариант 2 не знаю как.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697644
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА вот возник такой вопрос, а можно ли сделать так чтобы при перекомпиляции объекта метаданных, связанные с ним препарированные запросы становились инвалидными и перепрепарировались как только эти запросы потребуются? Я не в смысле ближайшего будущего, а вообще теоретически.Теоритически - можно всё, что не противоречит теории :)

На практике есть много вопросов. Например
- Сейчас движок никак не отслеживает связь объект -> запрос в кеше метаданных, только в обратную сторону.
Т.е. чтобы найти такие запросы, нужно проверить их все.

- Что делать с запросом, который сейчас выполняется ?
- Что делать с запросом, который выполнился, но тр-ция ещё не завершена ?
Не думаю, что разные результаты выполнения одного запроса в одной тр-ции будут именно тем, что ожидает прикладной программист

И т.д. - уверен, что это только верхушка айсберга
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697653
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad- Что делать с запросом, который сейчас выполняется ?
- Что делать с запросом, который выполнился, но тр-ция ещё не завершена ?

то же самое что и сейчас. Ругаться. Речь была только о препарированных запросах, которые не активны и транзакции которых завершены.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697657
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

А сейчас бывают случаи, когда успешно препарированный и успешно выполнявшийся ранее запрос вдруг выдает ошибку, причём не уровня "запрос правильный, но записи такой не найдено", а уровня требующего изменения текста запроса и перепрепарирования?

Навскидку мне кажется прикладные клиентские библиотеки и программы едва ли рассчитаны на автоматическое пере-препарирование запроса.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697659
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, препарирование запроса существует только внутри транзакции, или "препарированность" может быть передана в следующую транзакцию, если сам запрос (текст, BLR) не меняется?

В первом случае препарированные запросы имеет смысл сразу чистить, чтобы кэши освободить. Тут недавно как раз темы пробегали, что в FB3 гораздо больше памяти кэши отъедают. Во втором - наоборот, чтобы по возможности избежать более затратной проверки прав доступа.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697667
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

ты абсолютно не в теме. Писательский зуд ?
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697685
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

гм. к примеру, открыто 200 коннектов, активно 150 транзакций, при этом существует 500 запросов, из них привязаны к транзакциям штук 20. Остальные 480 - просто prepared, и держатся приложениями.
Это реальные данные по одной из систем. В других - по другому. Сервер сам никакие препарированные запросы не держит.
И т.д. Так что, надо быть поближе к реалиям. В mon$statements посмотреть, и всё такое.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697717
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНа практике есть много вопросов. Например
- Сейчас движок никак не отслеживает связь объект -> запрос в кеше метаданных, только в
обратную сторону.
Т.е. чтобы найти такие запросы, нужно проверить их все.

Можно пойти другим путём:
1) drop чего-то не удаляет объект физически, а всего лишь запись о нём из системных таблиц.
2) Когда эта удалённая запись становится мусором, сборщик мусора пробует получить лок и,
если обломался, оставляет этот мусор в покое до следующего обнаружения. Получил - удаляет
объект, ибо на него уже гарантированно никто не ссылается сейчас и не может сослаться в
будущем.
3) Способ получения идентификаторов придётся немного переделать чтобы новая таблица не
получила ид удалённой, но ещё не вычищенной.

hvlad- Что делать с запросом, который сейчас выполняется ?
- Что делать с запросом, который выполнился, но тр-ция ещё не завершена ?
Не думаю, что разные результаты выполнения одного запроса в одной тр-ции будут именно тем,
что ожидает прикладной программист
При вышеописанной схеме запросы в незавершившихся транзакциях будут выдавать правильные
результаты в соответствии с их уровнем изоляции. Возможен парадокс, когда заранее
препарированный (в давно завершившейся транзакции) запрос возвращает данные из таблицы, а
новое препарирование обламывается, но нормальный "прикладной программист" в такую ситуацию
вряд ли попадёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39697998
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov1) drop чего-то не удаляет объект физически, а всего лишь запись о нём из системных таблиц.
2) Когда эта удалённая запись становится мусором, сборщик мусора пробует получить лок и,
если обломался, оставляет этот мусор в покое до следующего обнаружения. Получил - удаляет
объект, ибо на него уже гарантированно никто не ссылается сейчас и не может сослаться в будущем.
при таком раскладе, когда RECREATE выдаст ошибку (на фазе CREATE, между прочим) - это еще можно будет понять. Но когда отдельный DROP/COMMIT пройдет, а потом на CREATE "то же имя" получим "object N already exists", при этом в системных таблицах его не видно - вот это будет весело...
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39698025
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrпри таком раскладе, когда RECREATE выдаст ошибку (на фазе CREATE, между прочим) - это еще
можно будет понять. Но когда отдельный DROP/COMMIT пройдет, а потом на CREATE "то же имя"
получим "object N already exists", при этом в системных таблицах его не видно - вот это
будет весело...

Это мы получим если получение идентификатора будет идти в системной транзакции, которая
работает в dirty read. А так, вроде бы, уникальное ограничение позволяет две записи с
одинаковым значением если одна из них уже удалена. Или нет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39698056
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov2) Когда эта удалённая запись становится мусором, сборщик мусора пробует получить локНе нужно сборщик мусора превращать в сферического мета-коня. Это не будет работать.

PS казалось бы - при чём тут инвалидация препарированных запросов...
PPS ты хочешь приделать версионность к метаданным, это нормально, но зачем скрещивать ужа с ежом - я не понимаю
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39698081
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladPS казалось бы - при чём тут инвалидация препарированных запросов...
Ну, до меня донеслись слухи, что WAIT - панацея и позволяет свободно альтерить любые
объекты невзирая на подключенных пользователей. А тут вдруг сюрприз в виде данного топика...

hvladPPS ты хочешь приделать версионность к метаданным, это нормально, но зачем
скрещивать ужа с ежом - я не понимаю

Если у тебя есть лучший план для их реализации, не томи, поделись светлой мыслью.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39698103
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

сюрпризов пока что не обнаружено. wait тр-ция ведёт себя так, как ей положено.

Ну а мои светлые мысли пока что останутся со мною.
Их и так есть чем занять.
...
Рейтинг: 0 / 0
Зависание FB при удалении таблицы/поля
    #39698461
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу, до меня донеслись слухи, что WAIT - панацея и позволяет свободно альтерить любые
объекты невзирая на подключенных пользователей. А тут вдруг сюрприз в виде данного топика...
в данном топике дропают, а не альтерят...
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависание FB при удалении таблицы/поля
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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