Форум: "Базы";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Вниз
Проблема при выполнении большого запроса через 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c