Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 31.03.2014, 12:41   #1
Пользователь
 
Аватар для Fertis
 
Регистрация: 07.03.2009
Сообщений: 64
Сказал Спасибо: 33
Имеет 2 спасибок в 2 сообщенях
Fertis пока неопределено
По умолчанию Delphi / БД ADO

Использую компоненты TADOConnection, TADOStoredProc. Суть такая, что существует пул, в который каждые пол минуты добавляется штук 30 объектов, информацию о которых надо занести в БД. В потоке, в цикле вызывается хранимая процедура, которая соответственно по очереди заносит информацию в БД. Работает стабильно днями, если не нагружать базу, но если с БД происходят тяжелые операции, бэкап / очень долгие минутные запросы / etc, то поток который вносит инфу в базу виснет. Таймаут у хранимки стоит 5 секунд... как бы понятно что при нагрузке на БД срабатывает таймаут, но конструкция ниже его не отлавливает:

Код:
try
  try
    // ***
    FStoredProc.ExecProc;
  except
    on E: Exception do LogError('Запись в базу данных не выполнена');
  end;
finally
  FStoredProc.Close;
end;
Поток застревает и дальше не идет, эксепшен не срабатывает тоже.
Также отдельным потоком параллельно проверяю состояние компонента ADOConnection, оно всегда True (хотя бывало даже False, но куда реже). Таймаут у хранимки сделать большим не выход из ситуации. Вообщем как можно правильно отловить таймаут? )
Fertis вне форума   Ответить с цитированием
Старый 01.04.2014, 13:14   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

свой TADOConnection для каждого отдельно взятого потока ?
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 02.04.2014, 11:23   #3
Пользователь
 
Регистрация: 11.03.2011
Сообщений: 73
Сказал Спасибо: 4
Имеет 8 спасибок в 4 сообщенях
Anfet пока неопределено
По умолчанию

Или TCriticalSecton оборачиваешь каждый запрос.
Или отдельное соединение.

Можешь сделать отдельный датамодуль, создавать его для каждого потока и использовать вполне спокойно.
__________________
l2tracker - самый правильный бот для L2
Anfet вне форума   Ответить с цитированием
Старый 02.04.2014, 22:28   #4
Пользователь
 
Аватар для Fertis
 
Регистрация: 07.03.2009
Сообщений: 64
Сказал Спасибо: 33
Имеет 2 спасибок в 2 сообщенях
Fertis пока неопределено
По умолчанию

Критические секции использую только при добавлении / извлечении из пула. Поток один, адоконнекшен тоже один, не многопоточно выполняю хранимку... как подсказал один человек, возможно фиговая синхронизация с основным потоком... хотя хз
Fertis вне форума   Ответить с цитированием
Старый 02.04.2014, 23:25   #5
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Цитата:
Поток один, адоконнекшен тоже один, не многопоточно выполняю хранимку...
"не многопоточно" 0_о это как ?

зы.
вангую что хранимая процедура вызывается в основном потоке приложения.
и есть дополнительный поток который переодически тоже обращается к бд.
в таком случае будут проблемы.

в моем посту выше есть "намек" на то как должно быть.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 03.04.2014, 10:27   #6
Пользователь
 
Аватар для Fertis
 
Регистрация: 07.03.2009
Сообщений: 64
Сказал Спасибо: 33
Имеет 2 спасибок в 2 сообщенях
Fertis пока неопределено
По умолчанию

не, народ видимо подумал что я вызываю хранимку из нескольких потоков, вот я и сказал что не многопоточно... в основном потоке процедура не вызывается, вызывается она как раз таки в дополнительном потоке. больше к бд никто не обращется.
Fertis вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:36.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!