![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про мидас [Win2k]
Alexander_K © (2004-03-10 15:11:00)Приветствую всех!
Написал программу, с тонким клиентом, которая работает с БД Оракл.
Instancing - Multiple use
Threading model - Apartment
Возникла следующая проблема:
При запуске в нескольких клиентах одновременно довольно длительный запросов эти запросы не выполняются параллельно! Выяснил это запуском одновременно длинного запроса и короткого. По идее если они выполняются параллельно - короткий закончиться быстрее... На самом же деле заканчиваются они в таком же порядке как и запускались...
Получается что каждое подключение не обрабатывается в отдельном витке на сервере приложений. Об этом свидетельствует то, что форма сервера приложений при выполнении запроса повисает и ее нельзя перетащить и т.д.
Народ подскажите как решить данную проблему, хотелось бы чтобы запросы выполнялись параллельно..
Dimk (2004-03-11 18:03:00) [81]Именно.
На какой версии оракла работаете?
Alexander_K (2004-03-11 18:03:00) [82]Dimk (11.03.04 17:59) [66]
Именно это и имеется ввиду! :)
Alexander_K (2004-03-11 18:01:00) [83]serge35 (11.03.04 17:55) [65]
Так вот короткий как раз и заканчивается после длинного!!!
Собственно в этом-то и вопрос!
Dimk (2004-03-11 17:59:00) [84]2 serge35
Не утрируйте... уж не пиарщик ли вы сударь?
Лично я думаю что речь идет о времени выполнения запроса.
Следовательно:
Длинный запрос - тот что выполняется долго.
Короткий запрос - тот что выполняется быстрее длинного в несколько раз, причем
на том же сервере и примерно в то же время.
Думаю что Автор имел в виду тоже, так как это следует из контекста его вопросов.
Итак:
Есть 2 запроса.
Один короткий :o)
Другой длинный.
Если запустить их из, 2 разных задач, сначала длинный а затем короткий, то короткий закончится раньше.
Если же из программы Автора, которая представляет собой
несколько клиентских программ и одного сервера приложений
в котором создаются несколько RDM, по числу клиентских программ,
запускаются эти запросы в той же последовательности - короткий заканчивается после длинного. Это может, конечно говорить о том что запросы выполняются последовательно (в данном случае).
Мной лично было проверено что дело не в сервере приложений. Сервер приложений прекрасно запускает несколько методов разных COM объектор параллельно.
Вообщето когда я делал подобный проект - я не обратил внимания на то что запросы выполняются последовательно так как мои запросы были КОРОТКИМИ ( :o) )
И тема между прочем серьезная и по ответам видно
что другие тоже не обращали внимания на такое обстоятельство.
Уф вот.
serge35 (2004-03-11 17:55:00) [85]> Сессия, которую запустил первую, стала активной и стала выполняться, остальные как были inactive так и остались..
Наконец-то появилась здравая идея - посмотреть, как же на самом
деле выполняются запросы.
Лично я это и называю очередью - когда один запрос запустился,
остальные ожидают, когда их обработает оптимизатор.
B Oracle Applications есть форма, в которой выведены все запросы и напротив каждого запроса прописан его статус.
Все прекрасно видно, какой запрос в каком состоянии.
Повторяю еще раз:
Запросы запускаются ПОСЛЕДОВАТЕЛЬНО, а выполняются ПАРАЛЕЛЬНО.
Для опыта предлагаю взять запросы которые очень сильно отличаются по "Длине". Допустим, один выполняется час, другой 2 сек.
Ситуация будет выглядеть так: сначала запуститься первый запрос, через некоторое время второй, ну а закончиться первым должен более "Короткий".
Представляю, что творилось бы в бухгалтерии, если бы пользовался такими терминами!
Alexander_K (2004-03-11 17:40:00) [86]serge35
Хоре флудить да!!! Давай по существу!
Reindeer Moss Eater (2004-03-11 17:38:00) [87]Он хочет сказать что у первого клиента очень много букв в его запросе, который никак не может поставиться в "очередь"
и поэтому второй клиент курит
Alexander_K (2004-03-11 17:38:00) [88]Сделал такую вещь:
На форме сервера поставил листбокс и на онкриейт RDM повесил продцедуру добавляющую в листбокс DatabaseName и SessionName из компонента Database
DatabaseName у меня равно sss
При запусках клиентов получилось:
sss Session1_1
sss Session1_2
sss Session1_3
При запуске клиентов (3 шт) на оракле (судя по спотлайту) появилось 3 сессии.
При запуске запросов с каждого клиента получилось:
Сессия, которую запустил первую, стала активной и стала выполняться, остальные как были inactive так и остались..
Vlad (2004-03-11 17:34:00) [89]
> serge35 (11.03.04 17:25) [60]
Может и в количестве символов, смотря в каком контексте.
Вот только читаю ветку и врубиться не могу к чему этот вопрос ?
serge35 (2004-03-11 17:25:00) [90]А может в количестве символов в запросе?
Vlad (2004-03-11 17:19:00) [91]
> Длина запроса выражается в сантиметрах или в чем-то еще?
> и насколько короткий запрос короче длинного?
Вырази в чем тебе угодно. Хочешь во времени обработки запроса сервером, хочешь в количестве ресурсов, как тебе угодно.
К чему этот вопрос ?
serge35 (2004-03-11 17:16:00) [92]С точки зрения клиента нет никакой разницы, как выполняются запросы. Клиент об этом просто ничего не знает. Он отправил
запрос и ждет ответ и все.
У меня есть пара вопросов:
Длина запроса выражается в сантиметрах или в чем-то еще?
и насколько короткий запрос короче длинного?
Reindeer Moss Eater (2004-03-11 17:09:00) [93]Тем более, что очереди никакой нет - запросы обрабатываются параллельно.
Reindeer Moss Eater (2004-03-11 17:06:00) [94]Ну и смысл тогда глубокомысленных высказываний
"запросы ставятся в очередь"
"И как бы вы ни пытались их запустить в паралель, все равно
запросы будут запускаться поочередно."
с точки зрения клиента Оракла и в контексте ветки????
serge35 (2004-03-11 17:04:00) [95]Dimk - читать надо внимательнее.
> запросы будут запускаться поочередно.
а выполняться они будут паралельно.
как их будет выполнять Оракл - это только одному известно.
Dimk (2004-03-11 16:53:00) [96]2 Alexander_K
А не хило бы проверить всеже действительно...
кто может поручиться что делает Borland там у нас за спиной :o)
Reindeer Moss Eater (2004-03-11 16:50:00) [97]Короче говоря выясняй сколько открывается сессий на оракле при работе твоих клиентов. Гадать на кофейной гуще больше не хочется
Dimk (2004-03-11 16:49:00) [98]2 serge35
Я уже запутался с чем с Тобой согласен а с чем нет :o)
> И как бы вы ни пытались их запустить в паралель, все равно
> запросы будут запускаться поочередно.
Ну а Ты веришь что на виндах на 1 процессоре могут ПАРАЛЛЕЛЬНО
выполняться 2 задачи? :o)
В dedicated режимя для каждой сессии запускается dedicated процесс который и выполняет юзерские запросы.
В MTS есть целая куча shared servers которые берут запросы из очереди и выполняют их. И если их (shared servers) не хватает
они запускаются дополнительно.
И в самом деле если сейчас выполняется запрос который идет несколько часов и еще пройдет несколько часов - то если набрать select sysdate from dual - можно идти курить все это время?
Alexander_K (2004-03-11 16:41:00) [99]sniknik © (11.03.04 16:30) [48]
Как оно может быть дефаулт? Если свойство AutoSessionName стоит true
Reindeer Moss Eater (2004-03-11 16:36:00) [100]А то, что более короткий запрос отработал позже более длинного запроса - просто из-за того, что серверу постоянно приходится переключаться от одного запроса к другому, к тому же первый запрос отхватывает для себя больше ресурсов.
Собственно я был против термина "очередь".
То что ты тут описал никак очередью называться не может. Это пул запросов.