Страница 1 из 1
Пока 2 вопроса общего плана
Добавлено: 03 дек 2004, 13:17
WAKE-UP
1. Как прервать текущий запрос (select)
а) с получением уже обработанных данных
б) без получения уже обработанных данных
2. После большого select-а машина находится в состоянии "напряга" - много свопится и т.п. Как избавить?
Re: Пока 2 вопроса общего плана
Добавлено: 03 дек 2004, 13:52
Merlin
Пока 2 ответа не менее общего плана.
WAKE-UP писал(а):1. Как прервать текущий запрос (select)
а) с получением уже обработанных данных
б) без получения уже обработанных данных
Завалить сервер целиком если это супер или этот процесс если это классика. С риском повредить базу. В буфере клиента останутся уже переданные на него записи, если таковые есть. Возможность их посмотреть зависит целиком и полностью от клиентских компонентофф.
WAKE-UP писал(а):
2. После большого select-а машина находится в состоянии "напряга" - много свопится и т.п. Как избавить?
Не писать плохие запросы и следить за тем, чтоб в базе не копился мусор тоннами.
Re: Пока 2 вопроса общего плана
Добавлено: 03 дек 2004, 14:30
kdv
WAKE-UP писал(а):1. Как прервать текущий запрос (select)
а) с получением уже обработанных данных
это как это? пока данные не обработаны целиком, серверу и выдавать нечего.
в момент обработки данных прервать текущий запрос могут только IB6.5 через IB API и IB 7.x через tmp$statements.
б) без получения уже обработанных данных
тут и прерывать нечего. просто не выбираешь данные (fetct), а закрываешь запрос.
2. После большого select-а машина находится в состоянии "напряга" - много свопится и т.п. Как избавить?
много свопится куда и чего?
Re: Пока 2 вопроса общего плана
Добавлено: 03 дек 2004, 15:46
Merlin
kdv писал(а):
это как это? пока данные не обработаны целиком, серверу и выдавать нечего.
Дим, поселекть isql без ордер бай какую-нить таблицу-миллионник (чтоб успеть процесс грохнуть до завершения) и таки грохни его. Если фетч уже пошёл, то часть передана. С какого объёма он начинает формировать сетевые пакеты и выпихивать я толком не знаю, но точно не после формирования всего курсора, если он не требует натуральной сортировки.
kdv писал(а):
в момент обработки данных прервать текущий запрос могут только IB6.5 через IB API и IB 7.x через tmp$statements.
А, ну да, про этих забыл

Добавлено: 03 дек 2004, 15:58
WAKE-UP
SQL = SELECT * FROM TABLE1
SQLClientDataSet.Open (SQLQuery.Open);
Как закрыть-то? Оно же синхронно работает!
Одним потоком открыть, а другим если что - закрывать?
Имеено сделать SQLQuery.Close?
Добавлено: 06 дек 2004, 11:05
kdv
to Merlin - под выполнением запроса я имею в виду от excecute до ответа сервера, что можно делать fetch. это может быть считывание одной страницы, сортировка в памяти, на диске, буферизация и т.п. (хотя вроде больше ничего). Поэтому про "прервать запрос с получением данных" - я не понимай.
to WAKE-UP. SQLQuery.Open по-моему ничего не выбирает, ну разве что выполняет запрос и выбирает одну запись. SQLClientDataSet использовать НЕ РЕКОМЕНДУЕТСЯ. ClientDataSet при открытии открывает то, из чего он будет брать данные, и делает fetchall. Поэтому тут "прервать" нельзя.
В общем, учите матчасть.