-
Если я в каждом потоке использую два TiBquery которые создаю в runtime тогда мне для каждого TiBquery нада создавать отдельную TIbDataBase и TIbTransaction, или TIbDataBase - одну для обоих TiBquery, а TIbTransaction - для каждого разную??? И для чего в TiBquery свойство Tranzaction, если транзакция есть в TIBDataBase??
-
> Kobylyansky (23.04.10 11:41)
> нада создавать отдельную TIbDataBase
нинада отдельную.
> TIbTransaction - для каждого разную???
Если TiBquery только для чтения данных - достаточно одной readonly транзакции для всех. Если read/write - то лучше отдельные.
-
-
Добавлю лишь следующее:
- одновременно работать с одним подключением из нескольких потоков - недопустимо.
- динамическое подключение к БД (и отключение) через TIbDataBase.Connected := True / False ОБЯЗАТЕЛЬНО должно быть защищено с помощью критической секции (либо (что хуже) с помощью других способов синхронизации).
- не обязательно для каждого подключения создавать TIbDataBase. Можно использовать пул подключений.
- при этом не нужно держать подключения долгое время. Только на время выполнения требуемого запроса.
-
> Loginov Dmitry © (24.04.10 00:20) [3]
> - одновременно работать с одним подключением из нескольких
> потоков - недопустимо.
Вполне допустимо.. Косяков не было.. Хотя, давно это было.. :(
-
> Вполне допустимо.. Косяков не было.. Хотя, давно это было.
> .
Вам просто повезло. Косяки были, есть и будут.
Сами IBX-ные компоненты не рассчитаны на такой режим работы.
-
> Loginov Dmitry © (24.04.10 00:27) [5]
Наверное я что-то неправильно делал :)
-
> Наверное я что-то неправильно делал :)
Наверное.
На 1-м ядре прога годами может работать безо всяких ошибок.
Интересное начинается, когда начинаешь тестировать это добро на многоядерном.
-
И еще:
Библиотека IBX, идущая в составе D7, не рассчитана на многопоточность.
Необходимо ее обновить до версии 7.11. Скачать можно с www.ibase.ru
-
> при этом не нужно держать подключения долгое время. Только
> на время выполнения требуемого запроса.
Еще интересное. Замечено, что когда коннекты подключены, из параллельного потока, долго (недели), то, после некоторого момента, по непонятной причине скорость выполнения запросов начинает сильно (иногда - на порядок) падать.
Причём после перезагрузки приложения скорость восстанавливается. Есть подозрение, что проблема именно в том, что коннекты долго открыты.
IBX 7.11, D7, FB 2.0.1.
-
> Loginov Dmitry (24.04.2010 00:20:03) [3]
То есть на компьютере можно запускать только одну программу.
-
> То есть на компьютере можно запускать только одну программу.
Зачем?
Сколько угодно.
-
> Loginov Dmitry (26.04.2010 11:25:11) [11]
Так каждая программа, это как минимум один поток. А в разных потоках нельзя использовать FireBird согласно утверждениям в обсуждение. Я естественно в подобное не верю, даже в рамках одной программ, поскольку это дурдом.
-
> А в разных потоках нельзя использовать FireBird согласно
> утверждениям в обсуждение. Я естественно в подобное не верю,
> даже в рамках одной программ, поскольку это дурдом.
Анатолий, перечитайте ветку еще разок.
-
А с ораклом можно...Клиент позволяет. Может у FB тоже клиент умеет ?
-
>Loginov Dmitry © (24.04.10 00:20) [3]
>- одновременно работать с одним подключением из нескольких потоков - недопустимо.
Недопустимо с точки зрения кривости чего, сервера или клиента ?
Каким боком сервер узнаЁт, что два запроса, поступающие от одного коннекта, выполняются на клиенте в разных потоках, и даже если узнает, какие проблемы этот факт у него вызывает ?
Если вопросы покажутся "ламерскими" на всякий случай внесу ясность - с птицей работал давно
-
> Недопустимо с точки зрения кривости чего, сервера или клиента
> ?
Сервер здесь не причем.
Ограничения связаны с реализацией IBX.
В принципе, все стандартные компоненты, наследуемые от TCustomConnection, страдают той же болезнью (в меньшей степени страдает TDataBase).