Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1081587167
ex
2004-04-10 12:52
2004.04.25
Как склонять ФИО в дательный падеж?, MSSQL


1-1081630447
Klopan
2004-04-11 00:54
2004.04.25
сохранение/загрузка ListView в/из файл.


3-1079684954
ikondakov
2004-03-19 11:29
2004.04.25
Delphi и SPSS


1-1081311737
Shtukos
2004-04-07 08:22
2004.04.25
Способ сделать демо-версию


3-1080788521
Badboy
2004-04-01 07:02
2004.04.25
Добавление





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский