Не работает delete from MON$STATEMENTS; FB 2.1

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
veart
Сообщения: 29
Зарегистрирован: 25 янв 2006, 09:39

Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение veart » 13 май 2009, 14:47

В Release Notes FB 2.1 заявлено, что можно отменять висячие запросы.
Cancel a Running Query
Runaway and long-running queries can now be cancelled from a separate connection....

Example
As a very rough example, the following statement will kill all statements currently running in the database, other
than any that belong to the separate connection that the SysAdmin is using himself:

delete from mon$statements where mon$attachment_id <> current_connection
Сколько не экспериментировал, не удалось ни разу.
Т.е. удалять с этой таблицы действительно можно (в отличие от MON$ATTACHMENTS, напр), но при обновлении запись там появляется снова.
Пробовал на CS и SS (оба 2.1)
Пробовал запросы запускать и от SYSDBA и от других пользователей, пробовал удалять свои и чужие запросы.
Пробовал удалять запросы, которые болтаются уже без программы, их запустившей (напр. можно запустить в IBExpert запрос в фоне и выйти, запрос останется висеть)
Может я чего-то не так понял? Кто-нибудь подобное делал?
Еще в последнем IBExpert-е есть инструмент для работы с мониторингом (Database Monitoring) - из него тоже ничего не получается. Там, кстати есть еще кнопки Shutdown Attachment и Commit/Rollback Transaction, тоже интересные функции. Наверное для FB 2.5?
Вобщем кто-нибудь в этом направлении что-нибудь делал?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение kdv » 13 май 2009, 15:02

Там, кстати есть еще кнопки Shutdown Attachment и Commit/Rollback Transaction, тоже интересные функции.
Database Monitoring впервые в IBExpert появился для InterBase 7.0 (таблицы tmp$). И именно в ИБ 7.0 уже была возможность коммита или отмены транзакции, снятия запроса, закрытия соединения.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение hvlad » 13 май 2009, 15:50

veart писал(а):Сколько не экспериментировал, не удалось ни разу.
Т.е. удалять с этой таблицы действительно можно (в отличие от MON$ATTACHMENTS, напр), но при обновлении запись там появляется снова.
Коммит сделай, чтобы данные мониторинга обновились

veart
Сообщения: 29
Зарегистрирован: 25 янв 2006, 09:39

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение veart » 13 май 2009, 20:01

hvlad, делал я коммит...
Сейчас на FB 2.5 CS пробовал с удалением запросов из MON$STATEMENTS - та же ерунда, ничего не меняется.
Хотя тут, в 2.5 дает еще из таблицы подключений (MON$ATTACHMENTS) удалять (В Firebird 2.5 Release Notes тоже написано, что добавлена такая возможность)
И вот с MON$ATTACHMENTS вроде что-то получается. И, кстати коммита делать не надо т.к. там написано что это не настоящие (виртуальные) таблицы и данные на самом деле нигде не обновляются. Т.е. после удаления из MON$ATTACHMENTS действительно второе соединение рвется сразу после удаления записи, даже без коммита, только в первом соединении это не видно - в таблице подключений те же строки, даже после коммита и обновления.
Вобщем надо эксперементировать, может даже и с MON$STATEMENTS что-то получится... Вроде что-то и работает, но как-то криво. Или я чего-то недоразобрался...

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение hvlad » 14 май 2009, 00:30

Давай воспроизводимый пример. С isql.

veart
Сообщения: 29
Зарегистрирован: 25 янв 2006, 09:39

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение veart » 14 май 2009, 06:30

Давай воспроизводимый пример. С isql.
Сейчас сделал пример на isql - все работает...
Потом повторил все с IBExpert - тоже все работает.
Работает и с запросами, которые висят без родительского приложения (т.е. в том же isql запускаем запрос и закрываем isql).
И про коммит верно, это я неверно понял - коммит надо делать ДО удаления записи, а не после.

Чего я там вчера так натупил , что на 3х компах, на обеих архитектурах, и на версиях FB 2.1 и FB 2.5 не работало, не могу понять... :(
Так что, похоже, все работает, извиняюсь за наезды на FB. :D
Если все-таки удастся повторить или понять почему не работало вчера, отпишусь...

Geydar
Сообщения: 4
Зарегистрирован: 13 янв 2011, 11:32

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение Geydar » 13 янв 2011, 11:44

Уважаемые админы.

Только что перешел на FB 2.1.3 с 1.5
Поясните, плз, одну вещь: в MON$STATEMENTS есть несколько запросов со STATE = 1, которые стартовали несколько часов назад, по делу явно выполнились и должны были закрыться.
Соответственно транзакция активна.
Никакими силами, даже после прочтения этой темы, не удается закрыть эти запросы в IBExpert.
И странная фраза встретилась: "Коммит надо делать ДО удаления запроса...". Коммит чего?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение dimitr » 13 янв 2011, 14:48

насчет "должны были закрыться" - это проблема твоего приложения. Оно наверняка держит недофетченный курсор.

через MON$-таблицы закрыть запрос невозможно, можно лишь его остановить (если он выполняется в данный момент). MON$STATE = 1 вкупе с отсутствием реакции на DELETE FROM MON$STATEMENTS означает клиента, который висит (ничего не делает) между фетчами из открытого курсора. Т.к. курсор недофетчен, его селект активен (вместе с его транзакцией), а т.к. в данный момент фетч не выполняется, то и оставить его нельзя.

Geydar
Сообщения: 4
Зарегистрирован: 13 янв 2011, 11:32

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение Geydar » 13 янв 2011, 17:13

Что-то проясняется.
Далее: дело в том, что приложение у клиента закрыто. И в то же время я вижу, что есть сетевой коннект к серверу, который тоже не убивается.
Может такое быть, что курсор в этом случае где-то болтается?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение hvlad » 13 янв 2011, 19:57

Ты тр-цию, в которой прочитал MON$xxx коммитил ? Иначе она тебе будет показывать одно и то же ещё год ;)

Geydar
Сообщения: 4
Зарегистрирован: 13 янв 2011, 11:32

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение Geydar » 14 янв 2011, 09:08

Конечно!

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение dimitr » 14 янв 2011, 10:00

Geydar писал(а):Далее: дело в том, что приложение у клиента закрыто.
не через task manager часом?
Geydar писал(а):И в то же время я вижу, что есть сетевой коннект к серверу, который тоже не убивается. Может такое быть, что курсор в этом случае где-то болтается?
конечно. Жди пока сервер обнаружит потерю связи с клиентом (http://ibase.ru/devinfo/keepalive.htm), тогда он закроет и коннект и транзакцию и все открытые курсоры.

Geydar
Сообщения: 4
Зарегистрирован: 13 янв 2011, 11:32

Re: Не работает delete from MON$STATEMENTS; FB 2.1

Сообщение Geydar » 14 янв 2011, 10:11

Вот это полезная статья.

Спасибо!

Ответить