![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ibase тормоза [D5, IB6.x]
SasaR © (2004-01-19 17:54:00)
Не сказал бы, что процедура моя возвращает много данных (20 -30 тыс.строк), но несколько первых тысяч видны в гриде, но при попытке "ехать" вниз или в цикле while not eof do Next сильнейшие тормоза, длящиеся часами...
Что я такого наделал (в смысле может совершил к-ть распространённую ошибку ?)
Как избежать подобного ?
SasaR (2004-01-20 10:39:00) [21]
To Desdechado - сервер IB6.0 здесь же, на моей машине, клиентской. Полей - понты. Должно получится ~30 тыс строк из таблицы в 80 тыс.Такое впечатление (прокручиваю в гриде), что сервер отфетчил ~50 записей и замер на 30 сек. кручу вниз - опять 30 сек и т.д... Может где не там suspend ставлю ?
На клиенте делаю фетч в однонаправленном-"невизуальном" TFIBquery ("зелёненкий") в MemoryDataSet из Rx-ов. Внутри цикла - Application.ProcessMessages....
Вы это имели ввиду ?
Кстати запрос там типа "поле <> 9"... может быстрее будет поле in [....] ?
Desdechado (2004-01-19 20:21:00) [22]
да, если у тебя строки по 50-100 полей и с блобами, то вообще дрова :)
Desdechado (2004-01-19 19:55:00) [23]
20-30 тыс записей для нормальной работы на клиенте не очень-то и нужны. Обычно 100-200 записей уже не в состоянии человек воспринять сразу.
А тормоза оттого, что идет закачка этих данных на клиент. Сервер-то их отделяет быстро, но затолкать их на клиент ему тяжело. Причины: тонкий канал (не пропускает много сразу) или слабый клиент (не может принять то, что сервер готов дать и канал - пропустить).
Рекомендую обходиться без таких выборок. А если хочешь делать экспорт, то делай это в пакетном режиме (без отображения), на однонаправленных курсорах и фоновой задачей.
jack128 (2004-01-19 19:04:00) [24]
> Результаты выполнения этой процедуры я вижу сразу
Значит сама процедура отрабатывает быстро.
> но если я не дай бог нажму в гриде Ctrl-End (в конец) или
> в цикле захочу пробежаться по данным запроса (напр. чтобы
> экспортировать в Excel) всё замерзает на часы.
Вывод - очень долгий фетч. Либо данных ОЧЕНЬ много(гораздо больше, чем несколько тысяч записей), либо очень тонкий канал связи(модем???)
}|{yk (2004-01-19 18:51:00) [25]
А индексы сделать слабо?
SasaR (2004-01-19 18:09:00) [26]
есть процедура, в ней делается запрос по "здоровенной" таблице.
Результаты выполнения этой процедуры я вижу сразу, но если я не дай бог нажму в гриде Ctrl-End (в конец) или в цикле захочу пробежаться по данным запроса (напр. чтобы экспортировать в Excel) всё замерзает на часы. В конце-концов в лучш. случае через пару часов пропадают песочные часы и можно свободно лазить по гриду вверх-вниз.
Каким образом тогда Ibase отдает записи в клиентское приложение ?
Частями ? Как это контролировать (типа OnAfterFethRecord есть ли такое)
Пользую FIBDataSet....
Заранее спасибо....
Term (2004-01-19 17:57:00) [27]
а скоко тогда по твоему много данных???
20-30 млн.?
к тому же чтобы ответить на твой вопрос слишком мало сведений представил