|
![]() |
#1 |
NavAx
|
Цитата:
3 строки в секунду? Что-то очень медленно, через COM с такой скоростью грузится. Что именно там происходит?
__________________
Isn't it nice when things just work? |
|
![]() |
#2 |
----------------
|
while selec a join b join c
У вас используются все поля из 3х таблиц? Если нет, то лучше их указать в запросе |
|
|
За это сообщение автора поблагодарили: Oleksandr (1). |
![]() |
#3 |
Участник
|
Многие. Но в принципе может быть поиожет, таблички нелегкие, почему-то сразу не подумал об этом.
__________________
-- regards, Oleksandr |
|
![]() |
#4 |
Участник
|
Помогло, практически в два раза уменшилось время, не подумал бы. Таблицы тяжелые. Сейчас еще в 3-тайере попробую
__________________
-- regards, Oleksandr |
|
![]() |
#5 |
NavAx
|
а что с памятью творится? prognosisLineList на миллион записей не начинает на диск кэшироваться?
__________________
Isn't it nice when things just work? |
|
![]() |
#6 |
Участник
|
Цитата:
В общем много неизвестных, и эксперименты слишком долгие получаются чтоб ынормально проанализировать.. С профайлером вообще нереально на больших данных. Вот и хотел сравнить с чисто сиквельным решением. Ладно, всем спасибо за советы, попробую поэксперементировать еще, сообщу
__________________
-- regards, Oleksandr |
|
![]() |
#7 |
----------------
|
Цитата:
Систем монитор, кстати, говорит что количество селектов соотв. количеству записей...
|
|
![]() |
#8 |
Участник
|
Нее, все постоянные
__________________
-- regards, Oleksandr |
|
![]() |
#9 |
Участник
|
Еще можно попробовать вставлять не целиком, а порциями по 500-1000 строк - иногда длинные транзакции тормозят
|
|
![]() |
#10 |
Участник
|
Да, это вариант. И предположително от большого объема рекординсертлист в памяти может быть своппинг.
__________________
-- regards, Oleksandr |
|
![]() |
#11 |
Участник
|
А мне кажеться, что можно попробовать убрать лишние джойны. И hash и lookup по своему хороши, но все равно на таких длинных выборках не сравнятся с заточенными одиночными запросами. Попробуйте, условную табличку "факта" убрать из джойна и сделать плейсхолдер селект в тот момент, когда нужны данные в процедуре обработки. Под этот селект хорошо заточенный индекс.
|
|
![]() |
#12 |
Участник
|
Цитата:
Сообщение от Torin
![]() А мне кажеться, что можно попробовать убрать лишние джойны. И hash и lookup по своему хороши, но все равно на таких длинных выборках не сравнятся с заточенными одиночными запросами. Попробуйте, условную табличку "факта" убрать из джойна и сделать плейсхолдер селект в тот момент, когда нужны данные в процедуре обработки. Под этот селект хорошо заточенный индекс.
__________________
-- regards, Oleksandr |
|
![]() |
#13 |
Member
|
А что там у вас внутри тогда такое?
Чтение из базы или запись? Или просто математика? Индексы оптимально подобраны? Запросы оптимизированы? Обращений к базе много за один вызов writePrognosisLines() происходит? Запросы с джоинами или простые? Если с джоинами, то forceplaceholders стоит? Сортировка или группировка есть? Попробуйте искусственно добавить условие в запрос с основным циклом, чтобы он отработал, например, 3 раза. И посмотрите профайлером, куда уходит время внутри writePrognosisLines().
__________________
С уважением, glibs® |
|
![]() |
#14 |
Участник
|
Цитата:
Сообщение от otkudao
![]() елки-палки! так вы в 2-х звенке пытаетесь разогнаться? так быстро не будет работать никогда!
Выносите ВСЕ операции с БД - в трехзвенку, - на серверную часть, - в методы с префиксом server (чтобы выполнялись исключительно на сервере.) Если класс (вот не помню, джоб, кажется, только клиентски по исполнению может быть, тогда перенесите методы в класс...) не позволяет своим методам выполняться на сервере, выносите эти методы в static (+ server). Ускорение (был опыт с отчетами) может достигать десятков раз! С отчетами - да, они частично на клиенте исполняются вроде.
__________________
-- regards, Oleksandr |
|
|
|