Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / object TABLE is in use. / 22 сообщений из 22, страница 1 из 1
05.09.2018, 08:14
    #39698179
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
object TABLE is in use.
Создал отдельную тему для 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
05.09.2018, 08:44
    #39698189
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
object TABLE is in use.
Через isql?

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

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

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

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

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

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

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

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

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

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

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

транзакция в которой нет активных запросов
...
Рейтинг: 0 / 0
05.09.2018, 12:10
    #39698340
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
object TABLE is in use.
Влад, вопроизвел 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
05.09.2018, 12:23
    #39698363
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
object TABLE is in use.
CyberMax,

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

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

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

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

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

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

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

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

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

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


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


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