powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / object TABLE is in use.
22 сообщений из 22, страница 1 из 1
object TABLE is in use.
    #39698179
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал отдельную тему для 21663641 .
В общем, вчера, после перезапуска базы, удалил две неиспользуемые таблицы. Сегодня утром попытался продолжить удаление и снова:
Код: plaintext
1.
2.
3.
4.
Невозможно подтвердить транзакцию:
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 TABLE "IMP$XXX" is in use.

Таблицы эти без ВК и прочего - просто таблица с данными. К ней никто не обращается. В MON$STATEMENTS никаких ссылок на удаляемые таблицы нет. В IBExpert'не ничего не делал, значит, это точно не он. То есть кто блокирует - загадка.

Влад, ответьте, пожалуйста, на следующие вопросы:
1. После отключения последнего пользователя от базы, все блокировки метаданных просто уничтожаются вместе со снятием блокировки с файла базы?
2. Блокировка связана с коннектом? Я понял, что препарированный запрос живет без транзакции, а если пользователь отключается от базы, не удалив препарированный запрос?
3. Через fb_lock_print можно увидеть, кто держит блокировку таблицы?

И отдельный вопрос:
1. Так как используется счетчик, нет возможности узнать, кто конкретно поставил блокировку?
Явно известно только в каком коннекте она используется.
Чтобы узнать точнее, нужно перебрать все запросы в кеше метаданных данного коннекта.
Есть возможность сделать доработку сообщения, которая покажет, в каких коннектах используется таблица?
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698189
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через isql?

П.С. Было так, что самописное приложение как-бы вышло (нет в списке задач), но в процессах висело с коннектом к базе. Как версия.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698196
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЧерез isql?
Через isql все работает.
Разбираюсь с SQL-монитором в IBExpert. Походу, это таки он виноватый.

P.S. Отпишусь еще попозже.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698206
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax1. После отключения последнего пользователя от базы, все блокировки метаданных просто уничтожаются вместе со снятием блокировки с файла базы?
2. Блокировка связана с коннектом? Я понял, что препарированный запрос живет без транзакции, а если пользователь отключается от базы, не удалив препарированный запрос?

1. Не знаю когда именно снимается блокировака с метаданных. А снятие блокировки файла БД произойдёт, но не факт что сразу. Могут фоновые потоки работать некоторое время. Плюс бывает ещё такая штука как лингер.
2. Препарированный запрос (как и весь кеш метаданных) связан с коннектом, по крайней мере сейчас. По идее препарированные запросы должны умереть сами.

>> Есть возможность сделать доработку сообщения, которая покажет, в каких коннектах используется таблица?

Как ты себе это представляешь, если будет 500 коннектов?
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698213
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКак ты себе это представляешь, если будет 500 коннектов?
Attachments: 1, 2, 5, 10, 1001, 1004, 50112 and more (total: 500).
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698215
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по мне так лучше сделать специальную таблицу мониторинга в которой будет содержаться все объекты метаданных на которые наложены блокировки. Ну и детализировать это другими таблицами (связанные коннекты, запросы, транзакции). Не знаю насколько это сложно реализовать, но было бы круто
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698224
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax1. После отключения последнего пользователя от базы, все блокировки метаданных просто уничтожаются вместе со снятием блокировки с файла базы?
2. Блокировка связана с коннектом? Я понял, что препарированный запрос живет без транзакции, а если пользователь отключается от базы, не удалив препарированный запрос?
3. Через fb_lock_print можно увидеть, кто держит блокировку таблицы?1. Если не вдаваться в детали - да.
2. Есть разные виды блокировок. Если говорить о метаданных, то - да, этими блокировками владеет коннект.
Препарированные запросы также владеются коннектом и умирают вместе с ним.
3. Да. Но т.к. эта утилита не рассчитана на конечного пользователя, то способ не очевиден и требует некоторых знаний устройства ЛМ.
Хотя и весьма прост :)

CyberMaxЕсть возможность сделать доработку сообщения, которая покажет, в каких коннектах используется таблица?Я уже говорил, что теоритически возможно многое.
На практике есть сложности.
В данном случае проще научить пользоваться fb_lock_print'ом :)
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698231
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы.

hvlad2. Есть разные виды блокировок. Если говорить о метаданных, то - да, этими блокировками владеет коннект.
Препарированные запросы также владеются коннектом и умирают вместе с ним.
А среди разработчиков была мысль или интерес сделать диагностическое сообщение в лог о том, что коннект отключается, не прибрался за собой, то есть остались неуничтоженные объекты, связанные с блокировками метаданных?

hvladДа. Но т.к. эта утилита не рассчитана на конечного пользователя, то способ не очевиден и требует некоторых знаний устройства ЛМ.
Хотя и весьма прост :)
А можете вкратце описать? Я самостоятельно попробую покопать в этом направлении.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698232
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениспо мне так лучше сделать специальную таблицу мониторинга в которой будет содержаться все объекты метаданных на которые наложены блокировки. Ну и детализировать это другими таблицами (связанные коннекты, запросы, транзакции). Не знаю насколько это сложно реализовать, но было бы круто
Это да, вообще идеальный вариант. Отпадет сразу куча проблем и вопросов.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698240
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxА среди разработчиков была мысль или интерес сделать диагностическое сообщение в лог о том, что коннект отключается, не прибрался за собой, то есть остались неуничтоженные объекты, связанные с блокировками метаданных?

Влад вроде ясно сказал, что такого быть не может. Умирающий коннект, убивает так же все объекты, которыми он владеет. Иначе это уже бага в ядре
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698244
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисВлад вроде ясно сказал, что такого быть не может. Умирающий коннект, убивает так же все объекты, которыми он владеет. Иначе это уже бага в ядре
Ты не понял. Коннект, умирая, смотрит, есть ли у него блокировки. И если есть, пишет в лог. По такому принципу работает обнаружение утечек памяти (в EurekaLog и FastMM) - при выходе из приложения проверяется, есть ли неосвобожденные участки памяти.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698278
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

В руководстве по FB 3.0 про MON$TRANSACTIONS.MON$STATE написано:
Состояние транзакции:
• 0 — бездействующая;
• 1 — активная.

Как понимать слово "бездействующая"?
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698285
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

транзакция в которой нет активных запросов
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698340
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влад, вопроизвел lock conflict в т.ч. и на isql.

Что требуется: 2 подключения. Можно IBExpert, можно isql.
1. Коннект №1. Создаем таблицу:
Код: sql
1.
2.
3.
CREATE TABLE TEST (
    NEW_FIELD  INTEGER
);


Делаем выборку:
Код: sql
1.
SELECT * FROM TEST


Транзакцию не коммиттим.

2. Подключаемся к базе Коннект №2.
Удаляем таблицу
Код: sql
1.
DROP TABLE TEST


Получаем исключение:
Код: plaintext
1.
2.
3.
4.
5.
Невозможно подтвердить транзакцию:
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 TABLE "TEST" is in use.
Откатываем транзакцию.

3. Мы знаем, что это выполняющийся запрос в Коннекте №1 нам мешает удалить таблицу.
Подтверждаем транзакцию у Коннекта №1. Теперь блокировок нет и мы спокойно можем удалить таблицу.

4. В коннекте №2 снова запускаем удаление таблицы:
Код: sql
1.
DROP TABLE TEST


Но сервер не может это сделать:
Код: plaintext
1.
2.
3.
4.
5.
Невозможно подтвердить транзакцию:
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 TABLE "TEST" is in use.

Откатываем транзакцию.

5. Пробуем удалить таблицу в коннекте №1. То же самое. Всё, таблицу никто не использует, но удалить ее не можем.

6. Достаточно любому коннекту отключиться и таблицу можно удалить.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698363
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

и что? Это ожидаемое поведение для no wait транзакции.
Очевидно что ни isql, ни IBE unprepare не делают
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698367
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad2. Есть разные виды блокировок. Если говорить о метаданных, то - да, этими блокировками
владеет коннект.
Препарированные запросы также владеются коннектом и умирают вместе с ним.

А вот тут возникает интересный вопрос: если в коннекте есть препарированный запрос, он
владеет SH блокировкой. При попытке в том же коннекте поменять данные, он захочет EX
блокировку. Поскольку обе блокировки принадлежат одному коннекту, SH сможет повыситься до
EX или будет облом?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698392
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениси что? Это ожидаемое поведение для no wait транзакции.
Очевидно что ни isql, ни IBE unprepare не делают
Что? Какое unprepare? Про это в документации есть?
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698418
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

забей. Здесь похоже я ошибаюсь.

Жизненный цикл запроса примерно такой:

При старте запроса
allocate->prepare->execute/open

При уничтожении запроса
close->unprepare->drop

Drop в любом случае проделает все предыдущие этапы. Когда и как это вызывается в этих приложениях я не знаю.
Как и не знаю точно как это влияет на препарированные запросы в кеше метаданых, да и на блокировки.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698419
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениси что? Это ожидаемое поведение для no wait транзакции.Именно так
Симонов ДенисОчевидно что ни isql, ни IBE unprepare не делаютДело не в unprepare (на самом деле речь об удалении запроса, но не важно).
Даже если бы делали - это толко обнулит счётчик ссылок на объект, но не отпустит его блокировку.

Дело в том, что в режиме nowait не посылаются сигналы с просьбой отпустить блокировку.
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698421
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

вот тут ДЕ пояснения даёт 19140159
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698424
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА вот тут возникает интересный вопрос: если в коннекте есть препарированный запрос, он
владеет SH блокировкой. При попытке в том же коннекте поменять данные, он захочет EX
блокировку.С чего бы это ?

Ты путаешь блокировку существования объекта
Код: plaintext
1.
LCK_rel_exist,				// Relation existence lock


и блокировку защиты от изменений
Код: plaintext
1.
LCK_relation,				// Individual relation lock
...
Рейтинг: 0 / 0
object TABLE is in use.
    #39698426
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисПри уничтожении запроса
close->unprepare->dropПро unprepare.
Его ввели в 2.5 по просьбе SAS и убрали в 3 как никому не нужное, iirc.
В любом случае - этот вызов не обязателен и не стоит его упоминать.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / object TABLE is in use.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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