Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Как прервать выполнение запроса 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
1-96291
Lanbo
2003-09-16 14:10
2003.09.29
NIL из Create


1-96298
BanderLog
2003-09-16 13:16
2003.09.29
FastReport для D7


1-96251
Armageddon
2003-09-17 15:56
2003.09.29
распознавания текста


8-96307
a72
2003-06-02 14:41
2003.09.29
Компоненты для векторной графики


8-96304
Term
2003-06-02 11:57
2003.09.29
Как поместить файл в ресурсы?