![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прервать выполнение запроса fibplus [Firebird 1.5]
Mexikan © (2003-09-09 20:17:00)
Есть ли возможность прервать выполнение тяжеловесного запроса запроса? Боюсь что выполнение его в отдельном потоке и уничтожение этого потока если он работает слишком долго только усугубит ситуацию. Хочеся каким нибудь асинхронным спомсобом оборвать выпронение этого запроса в базе данных, и коректно разрушить (или освободить (free)) обьекты tquery (или подобные).
Для связи с сервером бд использую fibplus 4.8.1.
Mexican (2003-09-10 14:36:00) [1]
чтото непонятно написал :)
реализация вашего решения требует изменения запроса.
Mexican (2003-09-10 14:33:00) [2]
Alexandr © (10.09.03 11:35) [15]
реализация вашего решения нужно изменять запрос.
Мне же необходима универсальная вещь.
Alexandr (2003-09-10 11:35:00) [3]
давайте не будем вспоминать про IB7 т.к. возможность снятия запросов появилась еще в IB6.5 но то, как она там реализована может привести к порче БД.
а я тему на рубил, я наоборот предложил нормальное решение.
Alexandr (2003-09-10 11:33:00) [4]
да, именно так, из отдельного потока поменять значениме генератора.
просто не забыть потом значение генератора вернуть назад.
Плюс учесть мнопользовательский режим.
Плюс учесть, что это where надо в такое место вкрутить, чтоб запрос прерывался, иногда по этим причинам проще SP.
вот так вот...
Жук (2003-09-10 11:17:00) [5]
> Alexandr © (10.09.03 11:04) [10]
> where exists(select 1 from RDB$database where gen_id(break_generator,0)=1)
А если сделать отдельный поток и оттуда поменять значение генератора ? Тогда и без ХП можно обойтись...
Mexican (2003-09-10 11:11:00) [6]
Какой же вы александр упорный, такую тему зарубили :(, ну кто мне теперь ответит как прервать запрос если вы увели в дебри еще натретьем посте :(
Уперлись вот в идеальность програмиста.
Сравнение
"Зачем вам ремни безопасности водители проходят обучения, и ошибки тут недопустимы!".
Zacho (2003-09-10 11:09:00) [7]
> Mexican (10.09.03 10:48) [9]
Нормально такая возможность реализована пока только в IB 7.
Так что если у тебя не IB 7, то единственный действительно нормальный способ - SP, все остальное может привести к разного рода неприятностям, включая повреждение БД.
Кстати, абсолютно согласен с Alexandr © - "А разработчика близко нельзя подпускать к рабочей БД." Для экспериментов, отладки, наращивания функциональности и т.п. у разработчика должна быть своя отдельная БД на отдельном сервере IB.
Alexandr (2003-09-10 11:04:00) [8]
нет надо все исправления и всю новую функциональность проверять на тестовом сервере, на тестовой БД.
А не на рабочей.
А пользователя надо ограждать от неправильных действий.
where exists(select 1 from RDB$database where gen_id(break_generator,0)=1)
Mexican (2003-09-10 10:48:00) [9]
Все ясно Саш, я понял с первого раза, отладчики не нужны, наращивать фенкциональность не надо, все надо писать разом и на века, оошибок вы ни когда не делаете.
Я же ошибки делаю, как впрочем и пользователь. Все не предугадаеш. Так что возмодность прерывать запрос нужна.
Alexandr (2003-09-10 10:34:00) [10]
какие ошибки могут повесить сервер?
ошибки разработчика.
А разработчика близко нельзя подпускать к рабочей БД.
И тестировать надо свои программы...
Если этот способ тебе не подойдет, то нафига тебе код? Ну придумай сам. Кстати, SP необязательно, можно и в большинство обычных запросов.
fibplus тут нипричем. Все дело в сервере.
Mexican (2003-09-10 10:29:00) [11]
Alexandr © (10.09.03 07:54) [4]
1) запросы НЕ должны быть тяжеловесными.
Я это знаю, но так же возможны ошибки которые могут повесить сервер. Перезегружать сервер у меня возмажности не будет поскольку я хочу использовать forcedwrites + ups (прошу вас не углубляться в обсуждение данного вопроса, а вернуться к первоначальной теме)
2) Использовать SP. В них можно корректно прерывать запрос.
Думаю что этот способ мне не подойдет, тем не менее код в студию :).
----
Так что fibplus не уменяят прерывать запросы во время выполнения?
Alexandr (2003-09-10 09:17:00) [12]
с помощью генератора, вестимо...
Жук (2003-09-10 08:34:00) [13]
> Alexandr © (10.09.03 07:54) [4]
> 2) Использовать SP. В них можно корректно прерывать запрос.
Это как же ?
Alexandr (2003-09-10 07:54:00) [14]
1) запросы НЕ должны быть тяжеловесными.
2) Использовать SP. В них можно корректно прерывать запрос.
don-do (2003-09-10 06:23:00) [15]
Принудительный разрыв коннекта на больших запросах происходит довольно часто. Например пользователь передумал дожидаться результата и убил прогу, а сервер продолжает выполнять задачу.
Для решения такой задачи приходиться использовать классик-сервер, т.к. он позволяет убить процесс, не роняя сервера, это конечно не есть хорошо, но другого выхода я не вижу. Так-же это дело можно автоматизировать, т.е. бить безхвостые процессы на сервере каким-либо демоном. Если же этого не делать то по крайней мере на IB4 эти процессы могли висеть до перезагрузки.
Mexikan (2003-09-10 01:07:00) [16]
Suntechnic © (10.09.03 00:35) [1]
:) справку я копал в первую очередь, потом убил пару часов на инет, к сожалению инфа там крайне однообразная, каждый вася пупкин пытается скопировать faq с www.ibase.ru на свой сайт, как жаль что в поисковике нелязя сделать distinct %(
При поиске в справке asynchronous выдается 6 результатов. Все они относятся к events и forcedwrites.
Я уверен что такая инфа где то есть, вот только где?
Эх замучился уже. :( пойду спать утро вечера мудренее.
PS В принципе можно было бы поиграться напрямую с клиентской библиотекой, ведь хендлы транзакции и бд у меня есть, но к сожалению я пользуюсь триально бесплатной версией (без исходников).
PPS IBExpert в своем мониторе при обрыве выполнения запроса показывает "hard commit". эх знать бы как его сделать. К стати ibexpert рульная софтина и для русских бесплатна, разбогатею, обязательно куплю. :)
Suntechnic (2003-09-10 00:35:00) [17]
Почитай в документации поддерживается ли асинхронная работа с бд, там и найдёшь ответ на свой вопрос. А на счёт отдельного потока и его уничтожения ты прав на все 100. Плохая это идея.