Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-96061
AlexPul
2003-09-08 12:05
2003.09.29
User Defined Function в Interbase


6-96321
Котелок
2003-07-30 05:33
2003.09.29
NMpop3 savetoeml


11-96158
nsvi
2003-01-08 03:24
2003.09.29
Опять по Proxies.dcu.


7-96454
elected
2003-07-18 17:07
2003.09.29
перехват трафика COM-порта


9-96046
Project-Soft
2003-03-22 10:12
2003.09.29
Особые столкновения спрайтов в DelphiX !





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский