Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: CL | DM;

Вниз

Проблема при выполнении большого запроса через ADO   Найти похожие ветки 

 
awaken   (2002-07-25 03:29) [0]

нарвался на неприятную ситуацию.
при выполнении запроса возвращающего порядка 170 тысяч записей через ADO DataSet в удаленном модуле MIDAS время выполнения запроса стремится к бесконечности (как и загрузка процессора и использование памяти)
при этом ничего экстраординарного я не делаю:
DataSet.CommandText := "select * from xxx"; (без условий)
DataSet.Open;

зы. тот же самый запрос забитый вручную в терминале MS SQL Server выполняется в течние нескольких секунд


 
Владислав ©   (2002-07-25 06:28) [1]

Жалко пользователей, которые будут работать с таким количеством записей!


 
awaken   (2002-07-25 08:03) [2]

пользователи с таким количеством работать конечно не будут
я просто тестирую систему на максимально худший случай
почему она виснет то? буфера что ли там какие-то переполняются?
причем локально (не через midas) рекордсет открывается.
а когда его открываешь через клиентский компонент с привязанным ClientRecordSet тогда все виснет - и клиент и сервер.
опытным путем установлено что не виснет при 5000 записях в рекордсете. начиная с 10000 все, пиши пропало.


 
Dok_3D ©   (2002-07-25 09:09) [3]

>> тогда все виснет - и клиент и сервер.

Виснет кто-то один из них.
Выясни, кто именно, и тебе будет проще локализовать проблему.


 
AlexSam   (2002-07-25 09:24) [4]

Может быть, файл подкачки на лок.станции увеличить?


 
jonik pegas ©   (2002-07-25 09:25) [5]

Вероятно ClientDataSet кеширует все данные в себя. На то он собственно и ClientDataSet чтобы закачать данные от сервера и работать с ними локально в случае необходимости передавать изменения серверу. А локально (не через midas) или в терминале рекордсет закачивает часть (ну сколько ему нужно чтобы например в Grid отобразить) и остонавливается. Так что проблема вероятно не в ADO. Для MS SQL можно поигратся конструкцией Select .....
TOP Максимально приемлимое колво записей


 
awaken   (2002-07-25 09:59) [6]

>Вероятно ClientDataSet кеширует все данные в себя. На то он >собственно и ClientDataSet чтобы закачать данные от сервера и

он кеширует однозначно. такое ощущение что все сразу пытается

>в Grid отобразить) и остонавливается. Так что проблема вероятно >не в ADO. Для MS SQL можно поигратся конструкцией Select .....
>TOP Максимально приемлимое колво записей
можно и так но я игрался с параметром самого TADODataSet. там есть свойство "возвращать не больше макс. количества записей" (по умолчанию 0, то есть все). реально никто конечно не делает поиски в базе возвращаюшие 5000 записей. но система должна быть "дуракоустойчивой"

>Виснет кто-то один из них.
виснут именно оба т.к. сервер "бесконечно" выполняет запрос (причем расход памяти на сервере растет не останавливаясь. как будто он все время новый буфер аллокирует). а клиент ждет т.к. функция вызова не является асинхронной. можно извратиться через многопоточность (так делает IE и прочие браузеры). запускать запрос в отдельном треде так чтобы юзер имел доступ к функциям пользовательского интерфейса (и кнопке Cancel search)





Страницы: 1 вся ветка

Текущий архив: 2002.08.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
3-47969
kalliopiy
2002-07-26 11:48
2002.08.15
О фильтрах


1-48156
Valentain
2002-08-01 16:06
2002.08.15
Помогите разобраться с ListView-ом


1-48060
Axill
2002-08-02 21:17
2002.08.15
Функция PlaySound не пашет, почему?


1-48183
Alfik
2002-08-02 16:49
2002.08.15
Ошибки


3-47997
Alfred
2002-07-27 17:19
2002.08.15
Ошибка