Главная страница
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.012 c
6-48227
nejest
2002-06-01 01:51
2002.08.15
отправка html файла по e-mail


14-48260
AZ
2002-07-18 06:17
2002.08.15
Ошибка чтения


3-47932
Zmey
2002-07-24 04:22
2002.08.15
MySQL


1-48193
Hellman
2002-08-02 19:18
2002.08.15
TListView


3-47931
mazepa
2002-07-25 11:22
2002.08.15
SQL Help