Конференция "Базы" » Firebird+многопоточность [D7, FireBird]
 
  • Kobylyansky (23.04.10 11:41) [0]
    Если я в каждом потоке использую два TiBquery которые создаю в runtime тогда мне для каждого TiBquery нада создавать отдельную TIbDataBase и TIbTransaction, или TIbDataBase - одну для обоих TiBquery, а TIbTransaction - для каждого разную??? И для чего в TiBquery свойство Tranzaction, если транзакция есть в TIBDataBase??
  • turbouser © (23.04.10 11:57) [1]

    > Kobylyansky   (23.04.10 11:41)  


    > нада создавать отдельную TIbDataBase

    нинада отдельную.

    > TIbTransaction - для каждого разную???

    Если TiBquery только для чтения данных - достаточно одной readonly транзакции для всех. Если read/write - то лучше отдельные.
  • turbouser © (23.04.10 11:59) [2]
  • Loginov Dmitry © (24.04.10 00:20) [3]
    Добавлю лишь следующее:
    - одновременно работать с одним подключением из нескольких потоков - недопустимо.
    - динамическое подключение к БД (и отключение) через TIbDataBase.Connected := True / False ОБЯЗАТЕЛЬНО должно быть защищено с помощью критической секции (либо (что хуже) с помощью других способов синхронизации).
    - не обязательно для каждого подключения создавать TIbDataBase. Можно использовать пул подключений.
    - при этом не нужно держать подключения долгое время. Только на время выполнения требуемого запроса.
  • turbouser © (24.04.10 00:22) [4]

    > Loginov Dmitry ©   (24.04.10 00:20) [3]


    > - одновременно работать с одним подключением из нескольких
    > потоков - недопустимо.

    Вполне допустимо.. Косяков не было.. Хотя, давно это было.. :(
  • Loginov Dmitry © (24.04.10 00:27) [5]

    > Вполне допустимо.. Косяков не было.. Хотя, давно это было.
    > .


    Вам просто повезло. Косяки были, есть и будут.
    Сами IBX-ные компоненты не рассчитаны на такой режим работы.
  • turbouser © (24.04.10 00:32) [6]

    > Loginov Dmitry ©   (24.04.10 00:27) [5]

    Наверное я что-то неправильно делал :)
  • Loginov Dmitry © (24.04.10 08:17) [7]

    > Наверное я что-то неправильно делал :)


    Наверное.
    На 1-м ядре прога годами может работать безо всяких ошибок.
    Интересное начинается, когда начинаешь тестировать это добро на многоядерном.
  • Loginov Dmitry © (24.04.10 12:05) [8]
    И еще:
    Библиотека IBX, идущая в составе D7, не рассчитана на многопоточность.

    Необходимо ее обновить до версии 7.11. Скачать можно с www.ibase.ru
  • Дмитрий Белькевич (25.04.10 11:57) [9]

    >  при этом не нужно держать подключения долгое время. Только
    > на время выполнения требуемого запроса.


    Еще интересное. Замечено, что когда коннекты подключены, из параллельного потока, долго (недели), то, после некоторого момента, по непонятной причине скорость выполнения запросов начинает сильно (иногда - на порядок) падать.

    Причём после перезагрузки приложения скорость восстанавливается. Есть подозрение, что проблема именно в том, что коннекты долго открыты.

    IBX 7.11, D7, FB 2.0.1.
  • Anatoly Podgoretsky © (26.04.10 08:48) [10]
    > Loginov Dmitry  (24.04.2010 00:20:03)  [3]

    То есть на компьютере можно запускать только одну программу.
  • Loginov Dmitry © (26.04.10 11:25) [11]

    > То есть на компьютере можно запускать только одну программу.


    Зачем?
    Сколько угодно.
  • Anatoly Podgoretsky © (26.04.10 12:14) [12]
    > Loginov Dmitry  (26.04.2010 11:25:11)  [11]

    Так каждая программа, это как минимум один поток. А в разных потоках нельзя использовать FireBird согласно утверждениям в обсуждение. Я естественно в подобное не верю, даже в рамках одной программ, поскольку это дурдом.
  • Loginov Dmitry © (26.04.10 21:37) [13]

    > А в разных потоках нельзя использовать FireBird согласно
    > утверждениям в обсуждение. Я естественно в подобное не верю,
    >  даже в рамках одной программ, поскольку это дурдом.


    Анатолий, перечитайте ветку еще разок.
  • Игорь Шевченко © (27.04.10 00:36) [14]
    А с ораклом можно...Клиент позволяет. Может у FB тоже клиент умеет ?
  • MsGuns © (27.04.10 11:33) [15]
    >Loginov Dmitry ©   (24.04.10 00:20) [3]
    >- одновременно работать с одним подключением из нескольких потоков - недопустимо.

    Недопустимо с точки зрения кривости чего, сервера или клиента ?
    Каким боком сервер узнаЁт, что два запроса, поступающие от одного коннекта, выполняются на клиенте в разных потоках, и даже если узнает, какие проблемы этот факт у него вызывает ?

    Если вопросы покажутся "ламерскими" на всякий случай внесу ясность - с птицей работал давно
  • Loginov Dmitry © (27.04.10 12:16) [16]

    > Недопустимо с точки зрения кривости чего, сервера или клиента
    > ?


    Сервер здесь не причем.
    Ограничения связаны с реализацией IBX.

    В принципе, все стандартные компоненты, наследуемые от TCustomConnection, страдают той же болезнью (в меньшей степени страдает TDataBase).
 
Конференция "Базы" » Firebird+многопоточность [D7, FireBird]
Есть новые Нет новых   [134433   +22][b:0][p:0.001]