![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Firebird+многопоточность [D7, FireBird]
Kobylyansky © (2010-04-23 11:41:00)Если я в каждом потоке использую два TiBquery которые создаю в runtime тогда мне для каждого TiBquery нада создавать отдельную TIbDataBase и TIbTransaction, или TIbDataBase - одну для обоих TiBquery, а TIbTransaction - для каждого разную??? И для чего в TiBquery свойство Tranzaction, если транзакция есть в TIBDataBase??
Loginov Dmitry (2010-04-27 12:16:00) [1]
> Недопустимо с точки зрения кривости чего, сервера или клиента
> ?
Сервер здесь не причем.
Ограничения связаны с реализацией IBX.
В принципе, все стандартные компоненты, наследуемые от TCustomConnection, страдают той же болезнью (в меньшей степени страдает TDataBase).
MsGuns (2010-04-27 11:33:00) [2]>Loginov Dmitry © (24.04.10 00:20) [3]
>- одновременно работать с одним подключением из нескольких потоков - недопустимо.
Недопустимо с точки зрения кривости чего, сервера или клиента ?
Каким боком сервер узнаЁт, что два запроса, поступающие от одного коннекта, выполняются на клиенте в разных потоках, и даже если узнает, какие проблемы этот факт у него вызывает ?
Если вопросы покажутся "ламерскими" на всякий случай внесу ясность - с птицей работал давно
Игорь Шевченко (2010-04-27 00:36:00) [3]А с ораклом можно...Клиент позволяет. Может у FB тоже клиент умеет ?
Loginov Dmitry (2010-04-26 21:37:00) [4]
> А в разных потоках нельзя использовать FireBird согласно
> утверждениям в обсуждение. Я естественно в подобное не верю,
> даже в рамках одной программ, поскольку это дурдом.
Анатолий, перечитайте ветку еще разок.
Anatoly Podgoretsky (2010-04-26 12:14:00) [5]> Loginov Dmitry (26.04.2010 11:25:11) [11]
Так каждая программа, это как минимум один поток. А в разных потоках нельзя использовать FireBird согласно утверждениям в обсуждение. Я естественно в подобное не верю, даже в рамках одной программ, поскольку это дурдом.
Loginov Dmitry (2010-04-26 11:25:00) [6]
> То есть на компьютере можно запускать только одну программу.
Зачем?
Сколько угодно.
Anatoly Podgoretsky (2010-04-26 08:48:00) [7]> Loginov Dmitry (24.04.2010 00:20:03) [3]
То есть на компьютере можно запускать только одну программу.
Дмитрий Белькевич (2010-04-25 11:57:00) [8]
> при этом не нужно держать подключения долгое время. Только
> на время выполнения требуемого запроса.
Еще интересное. Замечено, что когда коннекты подключены, из параллельного потока, долго (недели), то, после некоторого момента, по непонятной причине скорость выполнения запросов начинает сильно (иногда - на порядок) падать.
Причём после перезагрузки приложения скорость восстанавливается. Есть подозрение, что проблема именно в том, что коннекты долго открыты.
IBX 7.11, D7, FB 2.0.1.
Loginov Dmitry (2010-04-24 12:05:00) [9]И еще:
Библиотека IBX, идущая в составе D7, не рассчитана на многопоточность.
Необходимо ее обновить до версии 7.11. Скачать можно с www.ibase.ru
Loginov Dmitry (2010-04-24 08:17:00) [10]
> Наверное я что-то неправильно делал :)
Наверное.
На 1-м ядре прога годами может работать безо всяких ошибок.
Интересное начинается, когда начинаешь тестировать это добро на многоядерном.
turbouser (2010-04-24 00:32:00) [11]
> Loginov Dmitry © (24.04.10 00:27) [5]
Наверное я что-то неправильно делал :)
Loginov Dmitry (2010-04-24 00:27:00) [12]
> Вполне допустимо.. Косяков не было.. Хотя, давно это было.
> .
Вам просто повезло. Косяки были, есть и будут.
Сами IBX-ные компоненты не рассчитаны на такой режим работы.
turbouser (2010-04-24 00:22:00) [13]
> Loginov Dmitry © (24.04.10 00:20) [3]
> - одновременно работать с одним подключением из нескольких
> потоков - недопустимо.
Вполне допустимо.. Косяков не было.. Хотя, давно это было.. :(
Loginov Dmitry (2010-04-24 00:20:00) [14]Добавлю лишь следующее:
- одновременно работать с одним подключением из нескольких потоков - недопустимо.
- динамическое подключение к БД (и отключение) через TIbDataBase.Connected := True / False ОБЯЗАТЕЛЬНОдолжно быть защищено с помощью критической секции (либо (что хуже) с помощью других способов синхронизации).
- не обязательно для каждого подключения создавать TIbDataBase. Можно использовать пул подключений.
- при этомне нужно держать подключения долгое время. Только на время выполнения требуемого запроса.
turbouser (2010-04-23 11:59:00) [15]см.
http://ibase.ru/devinfo/ibx.htm
да и вообще - http://ibase.ru/
turbouser (2010-04-23 11:57:00) [16]
> Kobylyansky (23.04.10 11:41)
> нада создавать отдельную TIbDataBase
нинада отдельную.
> TIbTransaction - для каждого разную???
Если TiBquery только для чтения данных - достаточно одной readonly транзакции для всех. Если read/write - то лучше отдельные.