Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизВопрос про мидас Найти похожие ветки
← →
Alexander_K © (2004-03-11 18:41) [80]roottim (11.03.04 18:40) [79]
Специально выбрал запросы по разным таблицам, так что тексты здесь не важны
← →
Alexander_K © (2004-03-11 18:42) [81]Да и оба запроса читающие!!!
← →
roottim (2004-03-11 18:49) [82]то-биш выполнение их из 2-х сессий склплас дает нужный результат ?
ежели так, то возвращаемся к мидас серверу
← →
Asdor © (2004-03-11 19:42) [83]2 Alexander_K ©
Про запросы...
Открой 2 SQLExplorer"a
Запусти в одном длинный, в другом короткий запрос - и все узнают,
параллельно ли BDE c Oracle выполняют запросы...
← →
Reindeer Moss Eater © (2004-03-11 22:08) [84]Не надо упрямо повторять явную фигню про последовательное выполнение запросов в РАЗНЫХ СЕССИЯХ.
Нету никакого последовательного выполнения.
Это вам не локальный интербейс.
Если 5 минут назад главбух в своей сессии запустил расчет баланса который продлится всю ночь, а я к серверу подошел только сейчас, то мой select sysdate from dual выполнится сразу.
И не надо упрямо бубнить про последовательную постановку запросов в очередь на выполнение.
У автора вопроса он по твоему ТРИ МИНУТЫ ставится на выполнение?
У меня точно такой же сервер приложений, но без использования RDM, с точно таким же Ораклом обслуживает клиентов в доп.нитках одного процесса ПАРАЛЛЕЛЬНО.
Запросил один клиент услугу требующую 20 сек - получил результат через 20 сек.
Запросил другой клиент в это же время услугу требующую 1 сек - получил результат через 1 сек.
Итак, что мы выяснили:
-RDM"ов у автора несколько.
-Каждый открывает свое подключение к Ораклу.
-Но тем не менее, клиенты сервера приложений обслуживаются последовательно.
У меня лично осталось одно объяснение этому феномену:
Метод Open у всех датасетов во всех RDM вызывается в одной и той же нити.
← →
Michail Dalakov © (2004-03-11 23:00) [85]1.Ctrl+Shift+Esc
Выбираем счетчик потоков и смотрим создается ли новый поток
2.Запускаем OCI Debugger (что то типа MSSQL Profiler) и смотрим, а действительно ли второй запрос попадает на сервер, сразу после первого.
Метод Open у всех датасетов во всех RDM вызывается в одной и той же нити. Reindeer Moss Eater © (11.03.04 22:08) [84]
Так не бывает, для каждого клиента в отдельном потоке на сервере приложений создается обслуживающий COM-объект, поэтому метод
Open вызывается в разных потоках.
Можно, предположить, что имеет место синхронизация потоков,
как она у автора получается надо больше информации, но очевидно,
что один поток ждет завершения другого.
← →
Dimk (2004-03-12 18:36) [86]Не ручаюсь как в других версиях Delphi - но я только что попробовал
на Delphi7 с socket connection и с dcom connection.
Использовал компоненты TDataBase, TSession, TQuery, TProvider
(ну как все и рекомендуется в доке и примерах).
У меня запросы работают параллельно.
Переслал мои тесты (экзешники) Alexander_K. Тоже все пашет.
Разница, правда в том что у Alexander_K Borland C++ Builder v5.
Может там какой глюк? Может патчи какие надо поставить?
Поделитесь ссылочками на последние патчи для C++ Builder пожалуйста :o) С благодарностью приму ссылки на патчи к Delphi 7
← →
Alexander_K © (2004-03-12 19:39) [87]Dimk (12.03.04 18:36) [86]
У меня Borland C++ Builder 6
← →
Alexander_K © (2004-03-15 11:10) [88]Народ! Дайте ссылки на патчи к Borland C++ Builder 6, если они есть... Пожалуйста!
← →
Alexander_K © (2004-03-15 11:10) [89]Народ! Дайте ссылки на патчи к Borland C++ Builder 6, если они есть... Пожалуйста!
← →
Alexander_K © (2004-03-16 10:20) [90]Поставил 4 патч на Borland C++ Builder 6 не помогло...
← →
Alexander_K © (2004-03-16 10:20) [91]Поставил 4 патч на Borland C++ Builder 6 не помогло...
← →
Reindeer Moss Eater © (2004-03-16 10:24) [92]Ты выяснил, кто вызывает методы Open у твоих датасетов ?
← →
Alexander_K © (2004-03-16 17:54) [93]Да я и сам пробовал вызывать, и просто ClientDataSet открывать, чтобы он сам открыл запрос - без разници, все так же.
← →
serge35 (2004-03-17 11:10) [94]Спроси об этом у Си - шников, а то они все считают, что Дельфи - это полное фуфло, а Си - рулеззззззззззззз!!!
← →
Reindeer Moss Eater © (2004-03-17 11:14) [95]Alexander_K © (16.03.04 17:54) [93]
Да я и сам пробовал вызывать, и просто ClientDataSet открывать, чтобы он сам открыл запрос - без разници, все так же.
Так в какой нитке ты это делал сам?
Всегда в одной и той же?
← →
Alexander_K © (2004-03-17 11:39) [96]serge35 (17.03.04 11:10) [94]
Это надумано
Reindeer Moss Eater © (17.03.04 11:14) [95]
Я делал метод у сервера, в который передавался запрос через параметр, а я присваивал его Query и поле этого делал Open.
А в какой ветке оно вызывается - в этом и вопрос!
В делфи похоже вызывается в разных нитках, а как это делается в C++ Builder??
← →
Reindeer Moss Eater © (2004-03-17 11:56) [97]Берем событие датасета. Например BeforeOpen.
Внутри него пишем в лог значение GetCurrentThreadID и узнаем всю правду про то, из каких нитей вызван метод Open у этих самых датасетов
← →
Alexander_K © (2004-03-17 12:14) [98]Только что я сделал такую фигню, но не в момент открытия датасета, а на создание RDM, вставляя данные в листбокс, и получилось что треад один и тот же!
Хотя Instancing - Multiple use
Threading model - Apartment
Почему так?
← →
Reindeer Moss Eater © (2004-03-17 12:27) [99]а на создание RDM
Так ЭрДэЭмы - то наверняка создаются главной ниткой. И на выполнение запросов это не влияет.
Влияет то, из какой нити открываются датасеты.
← →
Alexander_K © (2004-03-17 12:51) [100]Пробовал и непосредственно перед Open() Ставить, то же самое, ID один и тот же!!
← →
Reindeer Moss Eater © (2004-03-17 12:55) [101]Значит методы Open вызываются из одной нити.
Значит пока не выполнится первый Open у первого клиента, не начнется выполняться второй Open у второго клиента.
Вот и все.
← →
Alexander_K © (2004-03-17 12:58) [102]Reindeer Moss Eater © (17.03.04 12:55) [101]
Дык это все понятно! Да почему это так????? Должно же быть в разных потоках!
← →
Reindeer Moss Eater © (2004-03-17 13:00) [103]А я против разве?
← →
Michail Dalakov © (2004-03-17 13:10) [104]Michail Dalakov © (11.03.04 23:00) [85]
1.Ctrl+Shift+Esc
Выбираем счетчик потоков и смотрим создается ли новый поток
← →
Reindeer Moss Eater © (2004-03-17 13:12) [105]Michail Dalakov ©
Уже сто лет назад было выяснено, что у автора N датамодулей и N ниток.
← →
Michail Dalakov © (2004-03-17 13:31) [106]Так не бывает,
как могут Query лежащие в разных потоках открываться в одном потоке.
← →
Reindeer Moss Eater © (2004-03-17 13:36) [107]Начнем с того, что Query ни в каких потоках не лежат.
В потоках выполняется код.
← →
Michail Dalakov © (2004-03-17 13:51) [108]Хорошо уберем слэнг и скажем так,
как могут экземпляры объектов созданные в разных потоках окрываться в одном потоке?
← →
Reindeer Moss Eater © (2004-03-17 14:02) [109]А что этому может помешать?
Поток №1 вызвал конструктор
Поток №2 присвоил значения свойствам
Поток №3 присвоил значения параметрам
Поток №4 вызвал метод Open
Поток №5 проскроллил датасет с первой записи до десятой
Поток №6 проскроллил датасет с десятой записи до последней
Поток №7 закрыл датасет
Поток №8 вызвал деструктор.
Что невозможного или незаконного в этом?
← →
Alexander_K © (2004-03-17 14:03) [110]Michail Dalakov © (17.03.04 13:51) [108]
Так вот в этом-то и вопрос, почему Borland C++ Builder 6 создает все в одном потоке?
← →
Reindeer Moss Eater © (2004-03-17 14:14) [111]В скольких потоках созданы датамодули и датасеты - рояли не играет.
Важно в каких потоках вызываются методы Open.
Возможно там просто synchronize для этого используется, я не знаю, - тогда все Open идут из одного потока. Главного.
← →
Reindeer Moss Eater © (2004-03-17 14:21) [112]В скольких потоках созданы датамодули и датасеты - рояли не играет.
Важно в каких потоках вызываются методы Open.
Возможно там просто synchronize для этого используется, я не знаю, - тогда все Open идут из одного потока. Главного.
← →
Michail Dalakov © (2004-03-17 14:36) [113]To Reindeer Moss Eater c (17.03.04 14:02) [109]
Вопрос не в том возможно это или нет в принципе, вопрос в том, что это абсурд для данного конкретного случая
На каждое клиентское приложение в отдельных потоках на сервере создаются COM-объекты, каждое из клиентских приложений вызывает метод COM-объекта, который в конечном счете приводит к открытию набора данных,
где в данном случае по твоему должен открываться набор данных?
← →
Michail Dalakov © (2004-03-17 14:36) [114]To Reindeer Moss Eater c (17.03.04 14:02) [109]
Вопрос не в том возможно это или нет в принципе, вопрос в том, что это абсурд для данного конкретного случая
На каждое клиентское приложение в отдельных потоках на сервере создаются COM-объекты, каждое из клиентских приложений вызывает метод COM-объекта, который в конечном счете приводит к открытию набора данных,
где в данном случае по твоему должен открываться набор данных?
← →
Nikolay M. © (2004-03-17 14:39) [115]А может транзакции есть блокирующие? Не заметил такой мысли в обсуждении выше.
← →
Nikolay M. © (2004-03-17 14:41) [116]А может транзакции есть блокирующие? Не заметил такой мысли в обсуждении выше.
← →
Michail Dalakov © (2004-03-17 15:06) [117]To Alexander_K © (17.03.04 14:03) [110]
To Reindeer Moss Eater © (17.03.04 13:12) [105]
Господа вы как нибудь определитесь в самом деле?
Michail Dalakov © (17.03.04 13:10) [104]
← →
Reindeer Moss Eater © (2004-03-17 15:17) [118]To Alexander_K © (17.03.04 14:03) [110]
To Reindeer Moss Eater © (17.03.04 13:12) [105]
Господа вы как нибудь определитесь в самом деле?
Господин Alexander_K в посте 110 говорил о создании датамодулей одним потоком
А господин Reindeer Moss Eater в посте 105 говорил о том, что они создаются и их все же несколько, а не один.
← →
Michail Dalakov © (2004-03-17 15:18) [119]To Nikolay M. © (17.03.04 14:39) [115]
Оставтье oracle в покое он работает как положенно,
?? А может транзакции есть блокирующие?
это на обычный select * from table? не бывает так.
← →
Alexander_K © (2004-03-17 15:19) [120]Сейчас решил посмотреть из диспетчера задач сколько потоков у меня в сервере
При запуске 1 клиента запустился сервер с 4 потоками
При логине к базе в клиенте на сервере стало 5 потоков
При запуске последующих клиентов (6 штук) потоков на сервере не увеличилось!
Выходит как будь-то single...
Но в проекте у меня стоит
Instancing - Multiple use
Threading model - Apartment
В чем грабли?
Страницы: 1 2 3 4 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.68 MB
Время: 0.045 c