|
|
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, у меня проблема следующего рода: Мне нужно реализовать многопользовательскую работу с базой на ASA. Работаю в .Net через ODBC. В тестовом примере я выполняю простую операцию - добавляю новую запись и открываю СRecordset запросом с указанием первичного ключа добавленной строки. В итоге при параллельном вызове данной операции хотя бы двумя клиентами через некоторое время возникает следующая ошибка: CDBException exception: State:S1000,Native:-685,Origin:[Sybase][ODBC Driver][Adaptive Server Anywhere] General error: Resource governor for 'prepared statements' exceeded Причём ошибка появляется в разный момент, не понятно в зависимости от чего. Кто-нибудь встречался с подобным ? Возможна ли многопоточная работа с ASA вообще и через ODBC в частности ? С чем это может быть связано ? Надеюсь на скорый ответ. Буду рад любым осмысленным рекомендациям. ЗЫ: Я постарался по возможности упростить пример, если нужно ещё какие-то данные то дополню, я просто не могу предположить в какую область копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 13:24 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Опциями ODBC не пробовали играться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 14:09 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
СкептикМне нужно реализовать многопользовательскую работу с базой на ASA. Работаю в .Net через ODBC. В тестовом примере я выполняю простую операцию - добавляю новую запись и открываю СRecordset запросом с указанием первичного ключа добавленной строки. В итоге при параллельном вызове данной операции хотя бы двумя клиентами через некоторое время возникает следующая ошибка: CDBException exception: State:S1000,Native:-685,Origin:[Sybase][ODBC Driver][Adaptive Server Anywhere] General error: Resource governor for 'prepared statements' exceeded А поискать в Гугле лень? Причина банальна до безобразия - открывая курсоры, рекомендуется их после этого закрывать. Сообщение вылезает, когда открытых курсоров становится чересчур много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 14:15 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Еще для .NET можно воспользоваться нативным драйвером ASA, который по идее под нее и заточен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 14:43 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Дело в том, что как правило в ODBC и других CLI-библиотеках одно соединение может выполнять в одно и то же время только один запрос. Т.е. приложение должно выполнить запрос , и выбрать все его результаты, либо отказаться от них, и освободить соединение. Только затем можно будет выполнять другой запрос, возможно в другом потоке клиента. Существуют вероятно базы данных, которые позволяют одновременно выполнять несколько запросов, подозреваю, что это Interbase, но видимо ASA к ним не относится (точно не могу сказать). К ним также точно не относятся такие сервера, как MSSQLServer и Sybase ASE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 11:24 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Да, еще. Тебе придется либо защищать соединения на время выполнения запроса с помощью каких-то Mutex-ов и использовать пул соединений, либо использовать схему "один поток - одно соединение с базой данных". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 11:33 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
MasterZivДело в том, что как правило в ODBC и других CLI-библиотеках одно соединение может выполнять в одно и то же время только один запрос. Т.е. приложение должно выполнить запрос , и выбрать все его результаты, либо отказаться от них, и освободить соединение. Только затем можно будет выполнять другой запрос, возможно в другом потоке клиента. А какое это имеет отношение к вопросу? Скептик вообще путается в понятиях многопользовательской и многопоточной работы. MasterZiv Существуют вероятно базы данных, которые позволяют одновременно выполнять несколько запросов, подозреваю, что это Interbase, но видимо ASA к ним не относится (точно не могу сказать). Не совсем так. ASA может возвращать множественные результаты выборок. Прстейший пример - в ISQL включить опцию Show multiple result set и выполнить запрос: select 1, 'first result set' select 'second result set', 2 Получится 2 выборки (отображаются на разных закладках в ISQL - result set 1 и result set 2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 19:53 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун MasterZivДело в том, что как правило в ODBC и других CLI-библиотеках одно соединение может выполнять в одно и то же время только один запрос. Т.е. приложение должно выполнить запрос , и выбрать все его результаты, либо отказаться от них, и освободить соединение. Только затем можно будет выполнять другой запрос, возможно в другом потоке клиента. А какое это имеет отношение к вопросу? Скептик вообще путается в понятиях многопользовательской и многопоточной работы. MasterZiv Существуют вероятно базы данных, которые позволяют одновременно выполнять несколько запросов, подозреваю, что это Interbase, но видимо ASA к ним не относится (точно не могу сказать). Не совсем так. ASA может возвращать множественные результаты выборок. Прстейший пример - в ISQL включить опцию Show multiple result set и выполнить запрос: select 1, 'first result set' select 'second result set', 2 Получится 2 выборки (отображаются на разных закладках в ISQL - result set 1 и result set 2) Если между выражениями поставить ; то выводится только последнее. Это баг или свойство? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 09:39 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
авторЕсли между выражениями поставить ; то выводится только последнее. Это баг или свойство? Это означает, что точка с запятой воспринимается ISQL так же, как оператор GO, то есть разделитель между пакетами команд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 10:05 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
А какое это имеет отношение к вопросу? Скептик вообще путается в понятиях многопользовательской и многопоточной работы. Ну я видимо бессознательно прочитал "многопользовательность" как "многопоточность". Но суть от этого не меняется - у него ошибка в том, что он не освобождает соединение от запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 13:10 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
Не совсем так. ASA может возвращать множественные результаты выборок. Множественные результаты выборок могут многие СУБД возвращать. Но это один запрос, а не несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 13:11 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
MasterZivА какое это имеет отношение к вопросу? Скептик вообще путается в понятиях многопользовательской и многопоточной работы. Ну я видимо бессознательно прочитал "многопользовательность" как "многопоточность". Но суть от этого не меняется - у него ошибка в том, что он не освобождает соединение от запроса. Читать действительно нужно как "многопоточность". А о каком освобождении соединения может идти речь при конкурентном обращении ? Весь смысл как раз в том, что обращения происходят одновремнно, а потому число одновременно открытых соединений я не могу контролировать. Вообще проблема решилась путём отмены ограничений по умолчанию у опций MAX_STATEMENT_COUNT и MAX_CURSOR_COUNT. Вполне допускаю что это не панацея (кстати какие проблмы возможны из-за отменения этих ограничений ? ). Можете разжевать ваши пути решения проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 16:49 |
|
||
|
Проблема с многопоточностью
|
|||
|---|---|---|---|
|
#18+
СкептикА о каком освобождении соединения может идти речь при конкурентном обращении ? Весь смысл как раз в том, что обращения происходят одновремнно, а потому число одновременно открытых соединений я не могу контролировать. Каждому потоку - свой коннект. Чего уж проще-то? Вообще проблема решилась путём отмены ограничений по умолчанию у опций MAX_STATEMENT_COUNT и MAX_CURSOR_COUNT. Вполне допускаю что это не панацея (кстати какие проблмы возможны из-за отменения этих ограничений ? ). Это не решение, это засовывание головы в песок. Возможные проблемы - исчерпание ресурсов сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 17:33 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32777384&tid=2014100]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 263ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...