Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неопознаная ошибка


r.o.o.t ©   (2007-08-22 18:09:00) 

Господа вот такой вопрос у меня возникла проблемма

У меня трех звенная база данных на MIDAS работает через SocketConnection база MS Access  при подключении пользователей и вызове удаленных методов по записи или чтению в базу данных на SQL все работает нормально но при достижении 65-77 или более пользователей вновь подключенные пользователи немогут обращатся к базе т.е. открывать таблицы выполнять запросы но спокойно могут выполнять методы в которых нереализованно обращение к базе, хотя старые пользователи могут спокойно без ошибок обращатся к базе.

Обибка имеет вид "неопознаная ошибка"


Вася Правильный   (2007-08-23 13:13:00) [1]


> Клиенты подключались дальше но таблицы уже открыть немогли

что понимается под открытием таблицы?
попробуй select * from tbl where 1=0


r.o.o.t   (2007-08-23 11:45:00) [2]

короче дело такое

сэмулировал работу сервака подклбчил 1200 пользователй вызвал процедуры удаленные + одному SQL запросу в базу все работает(нодолго)
дальше освободил сервер переписал клиента запустил и попытался открыть по одной таблице на 64ом подключении все начило сбоить и появилась "Неопознаная ошибка"
Клиенты подключались дальше но таблицы уже открыть немогли
где рыть дальше???
Я так панимаю сущесвует пределное число открытия таблиц или еще чегонить


sniknik   (2007-08-23 11:16:00) [3]

> но ресурсов предостаточно т.к. пользователи могут образщатся к методам сервера которые несвязанны с базой но любые обращения к базе
> сопровождаютсятакой ошибкой
а ты уверен что методы сервера не общие, а дублируются для каждого клиента? это же принцип ООП код один, обрабатываемые им данные разные.

во проверили [6]? чего получается?

+ сделай пример аналогичный 6, только не для программ(процессов) а для потоков, в каждом потоке создавай по собственному датамодулю со всем что у тебя там есть из программы, к базе коннект не делай, а просто "наштампуй" такое количество потоков с ним.
это будет второй вариант модели COM, проверка, примерно тоже что происходит при модели "апартмент".
гарантирую не получится.
да, поток нужно проверять что рабочий/датамодуль создался, ну типа переменную на нем завести, или лучше ADODataSet.Tag использовать, инкрементировать и выдавать на главную форму для каждого потока...
а потом проверить метод этого потока, ну типа чтото, что не обращаясь к данным просто например возращает случайное значение (вот это скорее всего будет работать).

p.s. хотя ладно, хочешь искать "где светлее", флаг тебе в руки!


Сергей М.   (2007-08-23 10:20:00) [4]


> любые обращения к базе сопровождаютсятакой ошибкой
>


А как она выглядит на стороне MIDAS-сервера ?


r.o.o.t   (2007-08-23 10:13:00) [5]

255 взял из описания баз Access по поводу ограничения я понимаю что по ресурсам
но ресурсов предостаточно т.к. пользователи могут образщатся к методам сервера которые несвязанны с базой но любые обращения к базе сопровождаютсятакой ошибкой


Сергей М.   (2007-08-23 09:27:00) [6]


> R.O.O.T ©   (22.08.07 21:32) [3]
> База MS Access расчитанна на 255 активных сессий


Это где ты такое увидел ?
Сессиями "заправляет" не база, а СУБД.

Да и держать активными (открытыми) все сессии без явновыраженной необходимости тоже нет никакого резона.


sniknik   (2007-08-23 09:13:00) [7]

> там хватает
там нехватает


sniknik   (2007-08-23 09:12:00) [8]

> вроде помнится в БДЕ было похожее ограничение.
ограничение будет везде, даже вообще без баз...

сделай пример, и попробуй по запускать разные программы
procedure TForm1.Button1Click(Sender: TObject);
var
 i, Er: integer;
begin
 for i:= 1 to 255 do begin
   Er:= WinExec('Project2.exe', SW_SHOWNORMAL);
   if Er < 32 then begin
     Label2.Caption:= IntToStr(Er);
     Application.ProcessMessages;
     Break;
   end;
   Label1.Caption:= IntToStr(StrToIntDef(Label1.Caption, 0)+1);
   Application.ProcessMessages;
 end;  
end;

у меня так просто пустая форма запустилась 194 раза (если считать запущенное, а не просто вызов который и проигнорироваться может (в конце цикла особенно))
чуть посложнее (для написания а не по тому что там участвует) с 1м коннектом датасетом, гридом, и запросом возвращающим пару строк уже только 130 раз.
и т.д. более сложная меньше количество. чегото там хватает хендлов например...

ему надо модель сменить раз у него много юзеров, надо чтобы копии не плодились под каждого юзера, а например всех одной копией по очереди обрабатывать. либо апгрейдить железо/операционку помощнее (на серверную поменять).


Sergey13   (2007-08-23 08:54:00) [9]

> [0] r.o.o.t ©   (22.08.07 18:09)

А к аксесу чем цепляешься?

> но при достижении 65-77

вроде помнится в БДЕ было похожее ограничение.


sniknik   (2007-08-22 23:18:00) [10]

Access и его сессии тут могут быть и ни причем, вообще. а ограничение по какимто другим ресурсам, они то не бесконечные...
попробуй например запустить любую другую программу 255 раз... удалось? тогда возьми посложнее и поресурсоемкее потому как ты видимо "hello word!" запускал.

а у тебя модуль данных это считай приложение(процесс) для каждого клиента (или поток, в зависимости от Instancing в фабрике класса).
кстати можно попробовать поменять, это и еще ThreadingModel, посмотреть что выгоднее и подходит под задачу. может запустишь больше 77.


R.O.O.T   (2007-08-22 21:32:00) [11]

Неверно
База MS Access расчитанна на 255 активных сессий
темболее запросы в базу не сильно ресурсоемкие
кто нибудь прояснит более подробно?


Вася Правильный   (2007-08-22 19:41:00) [12]


> база MS Access
> при достижении 65-77 или более пользователей

и это еще живет?!! радуйся, оно даже на столько не рассчитано


r.o.o.t   (2007-08-22 18:10:00) [13]

что может быть??


Наверх

Титульная страница Поиск, карта сайта Написать письмо