![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про мидас [Win2k]
Alexander_K © (2004-03-10 15:11:00)Приветствую всех!
Написал программу, с тонким клиентом, которая работает с БД Оракл.
Instancing - Multiple use
Threading model - Apartment
Возникла следующая проблема:
При запуске в нескольких клиентах одновременно довольно длительный запросов эти запросы не выполняются параллельно! Выяснил это запуском одновременно длинного запроса и короткого. По идее если они выполняются параллельно - короткий закончиться быстрее... На самом же деле заканчиваются они в таком же порядке как и запускались...
Получается что каждое подключение не обрабатывается в отдельном витке на сервере приложений. Об этом свидетельствует то, что форма сервера приложений при выполнении запроса повисает и ее нельзя перетащить и т.д.
Народ подскажите как решить данную проблему, хотелось бы чтобы запросы выполнялись параллельно..
Alexander_K (2004-03-15 11:10:00) [61]Народ! Дайте ссылки на патчи к Borland C++ Builder 6, если они есть... Пожалуйста!
Alexander_K (2004-03-15 11:10:00) [62]Народ! Дайте ссылки на патчи к Borland C++ Builder 6, если они есть... Пожалуйста!
Alexander_K (2004-03-12 19:39:00) [63]Dimk (12.03.04 18:36) [86]
У меня Borland C++ Builder 6
Dimk (2004-03-12 18:36:00) [64]Не ручаюсь как в других версиях Delphi - но я только что попробовал
на Delphi7 с socket connection и с dcom connection.
Использовал компоненты TDataBase, TSession, TQuery, TProvider
(ну как все и рекомендуется в доке и примерах).
У меня запросы работают параллельно.
Переслал мои тесты (экзешники) Alexander_K. Тоже все пашет.
Разница, правда в том что у Alexander_K Borland C++ Builder v5.
Может там какой глюк? Может патчи какие надо поставить?
Поделитесь ссылочками на последние патчи для C++ Builder пожалуйста :o) С благодарностью приму ссылки на патчи к Delphi 7
Michail Dalakov (2004-03-11 23:00:00) [65]1.Ctrl+Shift+Esc
Выбираем счетчик потоков и смотрим создается ли новый поток
2.Запускаем OCI Debugger (что то типа MSSQL Profiler) и смотрим, а действительно ли второй запрос попадает на сервер, сразу после первого.
Метод Open у всех датасетов во всех RDM вызывается в одной и той же нити.Reindeer Moss Eater © (11.03.04 22:08) [84]
Так не бывает, для каждого клиента в отдельном потоке на сервере приложений создается обслуживающий COM-объект, поэтому метод
Open вызывается в разных потоках.
Можно, предположить, что имеет место синхронизация потоков,
как она у автора получается надо больше информации, но очевидно,
что один поток ждет завершения другого.
Reindeer Moss Eater (2004-03-11 22:08:00) [66]Не надо упрямо повторять явную фигнюпро последовательное выполнение запросов в РАЗНЫХ СЕССИЯХ.
Нету никакого последовательного выполнения.
Это вам не локальный интербейс.
Если 5 минут назад главбух в своей сессии запустил расчет баланса который продлится всю ночь, а я к серверу подошел только сейчас, то мой select sysdate from dual выполнится сразу.
И не надо упрямо бубнить про последовательную постановку запросов в очередь на выполнение.
У автора вопроса он по твоему ТРИ МИНУТЫ ставится на выполнение?
У меня точно такой же сервер приложений, но без использования RDM, с точно таким же Ораклом обслуживает клиентов в доп.нитках одного процесса ПАРАЛЛЕЛЬНО.
Запросил один клиент услугу требующую 20 сек - получил результат через 20 сек.
Запросил другой клиент в это же время услугу требующую 1 сек - получил результат через 1 сек.
Итак, что мы выяснили:
-RDM'ов у автора несколько.
-Каждый открывает свое подключение к Ораклу.
-Но тем не менее, клиенты сервера приложений обслуживаются последовательно.
У меня лично осталось одно объяснение этому феномену:
Метод Open у всех датасетов во всех RDM вызывается в одной и той же нити.
Asdor (2004-03-11 19:42:00) [67]2 Alexander_K ©
Про запросы...
Открой 2 SQLExplorer'a
Запусти в одном длинный, в другом короткий запрос - и все узнают,
параллельно ли BDE c Oracle выполняют запросы...
roottim (2004-03-11 18:49:00) [68]то-биш выполнение их из 2-х сессий склплас дает нужный результат ?
ежели так, то возвращаемся к мидас серверу
Alexander_K (2004-03-11 18:42:00) [69]Да и оба запроса читающие!!!
Alexander_K (2004-03-11 18:41:00) [70]roottim (11.03.04 18:40) [79]
Специально выбрал запросы по разным таблицам, так что тексты здесь не важны
roottim (2004-03-11 18:40:00) [71]и что за запросы ???
дело может быть в блокировке длинным запросом ресурса для короткого...
хотя если короткий это читающий select такого быть не должно...
но всеже запросы б в студию...
Dimk (2004-03-11 18:39:00) [72]2 serge35
А вот скажи Ты ПРОВЕРЯЛ что у Тебя запросы выполняются
параллельно? Я попытаюсь в свободное время
смоделировать ситуацию и чтобы использовалась не DCOM
а сокет сервер.
serge35 (2004-03-11 18:34:00) [73]Может автор сообщения что-то утаивает?
или может он изобрел что-то свое?
Dimk (2004-03-11 18:29:00) [74]2 serge35
У меня тоже было на нем - но я уже писал что не придавал значения проверке параллельности работы.
А теперь сомневаюсь что там все было параллельно.
serge35 (2004-03-11 18:24:00) [75]У меня был проект на scktsrvr.exe, подобных проблем не возникало.
Dimk (2004-03-11 18:18:00) [76]Ну наконец - то :o)
serge35 (2004-03-11 18:15:00) [77]при такой разнце в росте, Оракл выполнит короткий запрос быстрее, чем длинный, если получит их одновременно. Это однозначно.
Значит Оракл получает второй запрос только после того, как выполнит первый. Отсюда вывод: проблема не в оракле, а в том диспетчере, который отправляет запросы на оракл.
Dimk (2004-03-11 18:05:00) [78]Простите :o)
Про версию оракла вопрос был к serge35
Alexander_K (2004-03-11 18:05:00) [79]serge35 (11.03.04 18:04) [70]
длинный запрос выполняется примерно 3 минуты
а короткий практически мгновенно
serge35 (2004-03-11 18:04:00) [80]Сколько времени выполняется длинный запрос?