![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск долгой операции через ADO, ошибка «Время ожидания вышло»…
Kolan © (2007-12-25 15:42:00)Здравствуйте,
запускаю хрон проц, которая работает долго(несколько минут) через ADO. Не дождавшись результата получаю исключение «Время ожидания вышшло». Видимо где-то есть этот time out, и не его надо изменить Но как и где?
Ega23 (2007-12-28 12:31:00) [1]
> Нет. Надо запускать программой. «Раз в месяц» — это административная
> штука. Пользователь это делает из программы, но примерно
> раз в месяц…
А может пользователь раз в месяц стартует джоб, который, в свою очередь, запускает эту хранимку?
bvz (2007-12-28 12:27:00) [2]Если результат не важен можеш запустить асинхронный вызов хранимки
Kolan (2007-12-26 16:33:00) [3]> если бы не странное желание создать компонент в котором
> запрос выполняется
Наследство
sniknik (2007-12-26 16:11:00) [4]> Ты еще поиграй с параметром Prepared должно увеличить скорость обработки
вот это врядли...
если бы был множественный вызов одного и того же "легкого по времени" запроса, то еще может быть. в одном, даже не таком "тяжелом" доля времени в "неподготовленном" запросе невелика. и для одного одна подготовка будет всегда, раньше, позже, какая разнице? сумма времен все равно не изменится.
тут бы другое сильно помогло (если бы не странное желание создать компонент в котором запрос выполняется), выполнение в асинхронном режиме с не-ожиданием результата... пусть сервер его бы и "мусолил" 80сек, для клиента время бы стремилось к 0.
Shamansky_ne (2007-12-26 15:14:00) [5]Ты еще поиграй с параметром Prepared должно увеличить скорость обработки
Kolan (2007-12-26 12:13:00) [6]Установил тайм аут у запроса получилось. Благодарю.
Интересно а в BDE есть такое понятие как тайм аут? И почему он не ругался?
ЮЮ (2007-12-26 12:06:00) [7]
> Query := TADOCommand.Create(nil);
> TempTimeOut := DBConnection.CommandTimeout;
> DBConnection.CommandTimeout := 300;
почкму бы CommandTimeout не установить у Query? Ты ведб запрос не через DBConnection.Exec выполняешь
Kolan (2007-12-25 21:41:00) [8]> тогда ее стоит «запускать» не тебе, а серверу MSSQL в job-
> е.
Нет. Надо запускать программой. «Раз в месяц» это административная штука. Пользователь это делает из программы, но примерно раз в месяц
> и время ее работы тебя перестанет беспокоить
С BDE оно меня и не беспокоило
sniknik (2007-12-25 21:29:00) [9]> И запускаться будет раз в месяц.
тогда ее стоит "запускать" не тебе, а серверу MSSQL в job-е. плюс ко всем преимуществам что это дает (не надо ничего делать например), и время ее работы тебя перестанет беспокоить.
Kolan (2007-12-25 21:15:00) [10]> или у тебя там массовая рассылка писем через MSSQL, с ожиданием
> подтверждения?
Там жуткая, много экранная много экранная хранимка, которую писал не я. И струдом не то что понял, ели ели отформатировал её Она собирает данные. И запускаться будет раз в месяц.
> Кроме того надобность в TADOCommand весьма сомнительна
Мне там параметры надо подставлять
Завтра буду пробовать.
sniknik (2007-12-25 21:08:00) [11]> Что это? [2] ? Писал я.
не [2], а процедуру выполняющуюся 80с на "чистом MSSQL" (у нас даже 1С-ники считают подобное неприемлимым...)
или у тебя там массовая рассылка писем через MSSQL, с ожиданием подтверждения?
Anatoly Podgoretsky (2007-12-25 20:10:00) [12]
DBConnection.CommandTimeout := 300;
Это относится к DBConnection, смотри свойство у TADOCommand
Кроме того надобность в TADOCommand весьма сомнительна, поскольку метод у самого TAdoConnection есть Execute - вот на него и влияет это свойство, а не на TADOCommand
Kolan (2007-12-25 18:14:00) [13]> в D5, и D6 без апдейтов(SP) c CommandTimeout были проблемы,
> новое значение не устанавливалось, приходилось править
> генофонд.
Пользую DBS 2006
Перевожу проект с D7 + DBE на DBS 2006 + ADO
> чтонибудь тяжелое бить того кто это писал
Что это? [2] ? Писал я.
Если имелся ввиду работник Borland, то как обойти тогда? Надо запустить хранимку
sniknik (2007-12-25 18:11:00) [14]в D5, и D6 без апдейтов(SP) c CommandTimeout были проблемы, новое значение не устанавливалось, приходилось править генофонд.
> это эело выполняестя 60-80 секунд. Куда копать?
откопай, неважно откуда, чтонибудь тяжелое бить того кто это писал...
Kolan (2007-12-25 16:42:00) [15]> хроническая?
пока только хранимая :)
Правильный_Вася (2007-12-25 16:40:00) [16]
> хрон проц
хроническая?
Kolan (2007-12-25 16:27:00) [17]
> DBE работало
BDE
Kolan (2007-12-25 16:26:00) [18]> ну да есть называется CommandTimeout
Что-то не так млин, с DBE работало :
Сократил код до минимума для отладки:
var
Query: TADOCommand;
TempTimeOut: Integer;
begin
Query := TADOCommand.Create(nil);
TempTimeOut := DBConnection.CommandTimeout;
DBConnection.CommandTimeout := 300;
try
Query.Connection := DBConnection;
Query.CommandText := 'EXECUTE dbo.FILLECO 1401, ''2006-06-10'', ''2006-07-25'', 0, 0, NULL';
Query.Execute;
finally
Query.Free;
DBConnection.CommandTimeout := TempTimeOut;
end;
end;
При запуске получаю саюжевое сообщение.
В Query Analyzer'e это эело выполняестя 60-80 секунд. Куда копать?
Palladin (2007-12-25 16:07:00) [19]ну да... есть... называется CommandTimeout