powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с многопоточностью
14 сообщений из 14, страница 1 из 1
Проблема с многопоточностью
    #32773451
Скептик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
у меня проблема следующего рода:

Мне нужно реализовать многопользовательскую работу с базой на 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 в частности ? С чем это может быть связано ?

Надеюсь на скорый ответ. Буду рад любым осмысленным рекомендациям.


ЗЫ: Я постарался по возможности упростить пример, если нужно ещё какие-то данные то дополню, я просто не могу предположить в какую область копать.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32773590
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опциями ODBC не пробовали играться?
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32773610
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СкептикМне нужно реализовать многопользовательскую работу с базой на 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


А поискать в Гугле лень? Причина банальна до безобразия - открывая курсоры, рекомендуется их после этого закрывать. Сообщение вылезает, когда открытых курсоров становится чересчур много.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32773691
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще для .NET можно воспользоваться нативным драйвером ASA, который по идее под нее и заточен.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32775026
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что как правило в ODBC и других CLI-библиотеках одно соединение может выполнять в одно и то же время только один запрос.
Т.е. приложение должно выполнить запрос , и выбрать все его результаты, либо отказаться от них, и освободить соединение. Только затем можно будет выполнять другой запрос, возможно в другом потоке клиента.

Существуют вероятно базы данных, которые позволяют одновременно выполнять несколько запросов, подозреваю, что это Interbase, но видимо ASA к ним не относится (точно не могу сказать). К ним также точно не относятся такие сервера, как MSSQLServer и Sybase ASE.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32775055
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, еще.
Тебе придется либо защищать соединения на время выполнения запроса с помощью каких-то Mutex-ов и использовать пул соединений, либо использовать схему "один поток - одно соединение с базой данных".
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32776316
Фотография Александр Г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)
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32776677
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Г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)

Если между выражениями поставить ; то выводится только последнее. Это баг или свойство?
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32776740
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли между выражениями поставить ; то выводится только последнее. Это баг или свойство?
Это означает, что точка с запятой воспринимается ISQL так же, как оператор GO, то есть разделитель между пакетами команд.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32777384
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какое это имеет отношение к вопросу? Скептик вообще путается в понятиях многопользовательской и многопоточной работы.

Ну я видимо бессознательно прочитал "многопользовательность" как "многопоточность". Но суть от этого не меняется - у него ошибка в том, что он не освобождает соединение от запроса.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32777387
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем так. ASA может возвращать множественные результаты выборок.

Множественные результаты выборок могут многие СУБД возвращать. Но это один запрос, а не несколько.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32778018
Скептик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivА какое это имеет отношение к вопросу? Скептик вообще путается в понятиях многопользовательской и многопоточной работы.

Ну я видимо бессознательно прочитал "многопользовательность" как "многопоточность". Но суть от этого не меняется - у него ошибка в том, что он не освобождает соединение от запроса.

Читать действительно нужно как "многопоточность".

А о каком освобождении соединения может идти речь при конкурентном обращении ? Весь смысл как раз в том, что обращения происходят одновремнно, а потому число одновременно открытых соединений я не могу контролировать.

Вообще проблема решилась путём отмены ограничений по умолчанию у опций
MAX_STATEMENT_COUNT и MAX_CURSOR_COUNT. Вполне допускаю что это не панацея (кстати какие проблмы возможны из-за отменения этих ограничений ? ).

Можете разжевать ваши пути решения проблемы?
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32778122
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СкептикА о каком освобождении соединения может идти речь при конкурентном обращении ? Весь смысл как раз в том, что обращения происходят одновремнно, а потому число одновременно открытых соединений я не могу контролировать.
Каждому потоку - свой коннект. Чего уж проще-то?

Вообще проблема решилась путём отмены ограничений по умолчанию у опций
MAX_STATEMENT_COUNT и MAX_CURSOR_COUNT. Вполне допускаю что это не панацея (кстати какие проблмы возможны из-за отменения этих ограничений ? ).
Это не решение, это засовывание головы в песок. Возможные проблемы - исчерпание ресурсов сервера.
...
Рейтинг: 0 / 0
Проблема с многопоточностью
    #32778448
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, Скептик, ты что же открывал несколько соединений ? Ну так бы и сказал сразу.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с многопоточностью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]