|
|
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Delphi 10.2 DOA 4.1.3 OracleInstantClient 12_2 Создаю 1, 2, 5, 15 или 20 потоков для записи данных в БД. В кажом потоке создаются свои OracleSession и OracleQuery. Все работает хорошо. При увеличении количества потоков МОЖЕТ происходить External exception EBF00BAA. Не всегда и не во всех потоках. На форумах DOA пишут, что для недопущении этой ошибки нужно OracleSession.ThreadSafe:=True И да, это помогает, НО разработчики DOA говорят, что если сессия в отдельном потоке, то OracleSession.ThreadSafe:=True ставить не нужно . Можно было бы конечно оставить OracleSession.ThreadSafe:=True , но из-за этой опции немного снижается производительность. А мне это критично. Подскажите, может кто-то сталкивался с таким поведением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 08:41 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrb, а что для тебя критичнее - стабильность или более быстрая работа, но с External exception и вероятностью крэша приложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 09:28 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
asutp2, для меня важнее стабильность, но хочется полной ясности почему так происходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 10:21 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrb OracleSession.ThreadSafe:=True И да, это помогает, НО разработчики DOA говорят, что если сессия в отдельном потоке, то OracleSession.ThreadSafe:=True ставить не нужно Наверно, это они так планировали, а на деле заюзали какую-то глобальную переменную или еще что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 13:04 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
YuRock, Вот пытаюсь в исходниках найти это место. Думал, может уже кто-то нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 14:17 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrb, OraSession создается в конструкторе потока или в Execute? Попробуйте перенести в Execute ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 14:23 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, В конструкторе. В Execute попробовать можно, но не слишком ли много накладных расходов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 15:39 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrbне слишком ли много накладных расходов?Каких? У Вас объект создается в одном потоке, а используется в другом И, я надеюсь, Вы ему никакого Owner не передаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:01 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Вы имеете не мой цикл while not Terminated do в методе Execute, а один раз в начале Execute? Если так, то ошибка остается. А если создавать session + query перед каждым выполнением запроса, то расходы на создание, а потом и на очищение этих объектов будут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:11 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Нет, никаких Owner'ов нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:12 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Если создавать и удалять при каждом выполнении - ошибка остается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:20 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrb, Не очень понятно, что конкретно вызывает External Exception: DOA, OracleClient или сервер. Нельзя ли подключить исходники DOA в режиме отладки и выяснить какой модуль вызывает исключение? Есть ли ограничение у сервера Oracle на количество одновременных сессий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:27 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Конструктор потока Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Выполнение запроса в Execute потока: Код: pascal 1. 2. 3. 4. 5. 6. ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:31 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrbКонструктор потока Код: pascal 1. Хотя бы подключение перенес в Execute, не говоря о создании объектов. Это же долгая операция, зачем один поток должен все их делать. cptngrb_Vasilisk_, Вы имеете не мой цикл while not Terminated do в методе Execute, а один раз в начале Execute? Конечно же, он имел ввиду это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:39 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrbYuRock, Вот пытаюсь в исходниках найти это место Ищи, на что влияет ThreadSafe (впрочем, это тебе и так понятно, но мне больше нечего предложить, у меня и DOA нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:40 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrb, В каком месте вызывается External Exception : в конструкторе или в Execute? Поставь try except блок в каждой процедуре. После того как выделишь процедуру, выясни на какой конкретной строке в процедуре вылетает. Подозреваю, что либо на LogOn либо на Query.Execute. А может данные некорректны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:53 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
YuRock, Я не понимаю разницы между созданием объектов в конструкторе потока или Execute? Долго, медленно, на что это может повлиять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:53 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Belotsky Serge, Ошибка вылетает на OracleQuery.Execute. Все операции обернуты в try/except и ведется лог ошибок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:54 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrbYuRock, Я не понимаю разницы между созданием объектов в конструкторе потока или Execute? "в конструкторе" отрабатывает в потоке, который создает объект нового потока. "Execute" - это уже в новом потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:55 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrbДолго, медленно, на что это может повлиять? На время работы - это однозначно. А еще - мало ли. Может, там какой-то threadvar используется - в этом случае при создании в одном потоке будет использована одна переменная, а при обращении из другого - другая. Это может быть важно. Но вообще это вряд ли, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:58 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Тааааак. Перенес в блок Execute создание объектов. Ошибка начала появляется иногда и на LogOn. Теперь есть куда копать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 17:05 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
cptngrbОшибка начала появляется иногда и на LogOnТогда вот этомуcptngrbразработчики DOA говорят, что если сессия в отдельном потоке, то OracleSession.ThreadSafe:=True ставить не нужно .верить не стоит. Ошибка вываливается при обращении к клиентской библиотеке в другом потоке. Раньше у Вас это был только Execute, а теперь и LogOn добавился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 18:27 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
верить может и не стоить, но по крайней мере в процедуре LogOn они не виноваты. В клиентская библиотеке не потокобезопасна OCISessionBegin (в этом месте плавающая ошибка). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 09:45 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Хотя, как они не виноваты (DOA), когда от ThreadSafe зависит в каком режиме будет работать OCI.dll. Всем спасибо за внимание. Вопрос закрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 10:42 |
|
||
|
DOA Много потоков External exception EBF00BAA
|
|||
|---|---|---|---|
|
#18+
Думал, думал и решил провести тесты на 32-разрядной версиях oci.dll и DOA, так как старшие товарищи сказали, что все у них работает хорошо и вообще... оказались правы. Подобной ошибки не наблюдалось. Ошибка только в 64-разрядах. Если кому-нибудь удалось побороть, то прошу отозваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 11:32 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39604956&tid=2041141]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 341ms |

| 0 / 0 |
