Текущий архив: 2007.09.16;
Скачать: CL | DM;
ВнизНеопознаная ошибка Найти похожие ветки
← →
r.o.o.t © (2007-08-22 18:09) [0]Господа вот такой вопрос у меня возникла проблемма
У меня трех звенная база данных на MIDAS работает через SocketConnection база MS Access при подключении пользователей и вызове удаленных методов по записи или чтению в базу данных на SQL все работает нормально но при достижении 65-77 или более пользователей вновь подключенные пользователи немогут обращатся к базе т.е. открывать таблицы выполнять запросы но спокойно могут выполнять методы в которых нереализованно обращение к базе, хотя старые пользователи могут спокойно без ошибок обращатся к базе.
Обибка имеет вид "неопознаная ошибка"
← →
r.o.o.t © (2007-08-22 18:10) [1]что может быть??
← →
Вася Правильный (2007-08-22 19:41) [2]
> база MS Access
> при достижении 65-77 или более пользователей
и это еще живет?!! радуйся, оно даже на столько не рассчитано
← →
R.O.O.T © (2007-08-22 21:32) [3]Неверно
База MS Access расчитанна на 255 активных сессий
темболее запросы в базу не сильно ресурсоемкие
кто нибудь прояснит более подробно?
← →
sniknik © (2007-08-22 23:18) [4]Access и его сессии тут могут быть и ни причем, вообще. а ограничение по какимто другим ресурсам, они то не бесконечные...
попробуй например запустить любую другую программу 255 раз... удалось? тогда возьми посложнее и поресурсоемкее потому как ты видимо "hello word!" запускал.
а у тебя модуль данных это считай приложение(процесс) для каждого клиента (или поток, в зависимости от Instancing в фабрике класса).
кстати можно попробовать поменять, это и еще ThreadingModel, посмотреть что выгоднее и подходит под задачу. может запустишь больше 77.
← →
Sergey13 © (2007-08-23 08:54) [5]> [0] r.o.o.t © (22.08.07 18:09)
А к аксесу чем цепляешься?
> но при достижении 65-77
вроде помнится в БДЕ было похожее ограничение.
← →
sniknik © (2007-08-23 09:12) [6]> вроде помнится в БДЕ было похожее ограничение.
ограничение будет везде, даже вообще без баз...
сделай пример, и попробуй по запускать разные программы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 раз.
и т.д. более сложная меньше количество. чегото там хватает хендлов например...
ему надо модель сменить раз у него много юзеров, надо чтобы копии не плодились под каждого юзера, а например всех одной копией по очереди обрабатывать. либо апгрейдить железо/операционку помощнее (на серверную поменять).
← →
sniknik © (2007-08-23 09:13) [7]> там хватает
там не хватает
← →
Сергей М. © (2007-08-23 09:27) [8]
> R.O.O.T © (22.08.07 21:32) [3]
> База MS Access расчитанна на 255 активных сессий
Это где ты такое увидел ?
Сессиями "заправляет" не база, а СУБД.
Да и держать активными (открытыми) все сессии без явно выраженной необходимости тоже нет никакого резона.
← →
r.o.o.t © (2007-08-23 10:13) [9]255 взял из описания баз Access по поводу ограничения я понимаю что по ресурсам
но ресурсов предостаточно т.к. пользователи могут образщатся к методам сервера которые несвязанны с базой но любые обращения к базе сопровождаютсятакой ошибкой
← →
Сергей М. © (2007-08-23 10:20) [10]
> любые обращения к базе сопровождаютсятакой ошибкой
>
А как она выглядит на стороне MIDAS-сервера ?
← →
sniknik © (2007-08-23 11:16) [11]> но ресурсов предостаточно т.к. пользователи могут образщатся к методам сервера которые несвязанны с базой но любые обращения к базе
> сопровождаютсятакой ошибкой
а ты уверен что методы сервера не общие, а дублируются для каждого клиента? это же принцип ООП код один, обрабатываемые им данные разные.
во проверили [6]? чего получается?
+ сделай пример аналогичный 6, только не для программ(процессов) а для потоков, в каждом потоке создавай по собственному датамодулю со всем что у тебя там есть из программы, к базе коннект не делай, а просто "наштампуй" такое количество потоков с ним.
это будет второй вариант модели COM, проверка, примерно тоже что происходит при модели "апартмент".
гарантирую не получится.
да, поток нужно проверять что рабочий/датамодуль создался, ну типа переменную на нем завести, или лучше ADODataSet.Tag использовать, инкрементировать и выдавать на главную форму для каждого потока...
а потом проверить метод этого потока, ну типа чтото, что не обращаясь к данным просто например возращает случайное значение (вот это скорее всего будет работать).
p.s. хотя ладно, хочешь искать "где светлее", флаг тебе в руки!
← →
r.o.o.t © (2007-08-23 11:45) [12]короче дело такое
сэмулировал работу сервака подклбчил 1200 пользователй вызвал процедуры удаленные + одному SQL запросу в базу все работает(нодолго)
дальше освободил сервер переписал клиента запустил и попытался открыть по одной таблице на 64ом подключении все начило сбоить и появилась "Неопознаная ошибка"
Клиенты подключались дальше но таблицы уже открыть немогли
где рыть дальше???
Я так панимаю сущесвует пределное число открытия таблиц или еще чегонить
← →
Вася Правильный (2007-08-23 13:13) [13]
> Клиенты подключались дальше но таблицы уже открыть немогли
что понимается под открытием таблицы?
попробуй select * from tbl where 1=0
Страницы: 1 вся ветка
Текущий архив: 2007.09.16;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.056 c