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