Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
Вот обнаружил такую вещь:

С клиента (Delphi) выполняю запрос (довольно большой, страниц на восемь). В первый раз он выполняется около 1 сек. Второй раз тормозит - около 5 секунд, А все последующие разы (в этом же соединении) почти мгновенно.
И это постоянно так. Вот хочется узнать почему это происходит. Я так подозреваю, что при втором выполнении запроса, сервер (SQL 2000 PE) делает чего-то. Интересно чего? И нужно ли с этим бороться?
25 фев 03, 12:43    [134835]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
А точно сервак тормозит, профайлером время выполнения смотрел. А первый и второй запросы один в один, или мож параметры разные. Через че работаешь BDE, ADO.
25 фев 03, 12:48    [134842]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
Параматры абсолютно одинаковые.

Работаю через ADO

Тормозит вот здесь:

adostoredproc.active:=true;


И главное это постоянно происходит. Именно второе выполнение, а последующие мгновенно.
25 фев 03, 13:13    [134858]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ну давай показывай, что внутри ХП.
25 фев 03, 13:17    [134861]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
aag
Member

Откуда: Москва
Сообщений: 1955
А такой большой обьем запроса с дельфей - это какие-то прЫнципиальные причины? Может, лучше, что-то еще на сервер переложить? Хотя к данной проблеме отношения это может и не иметь
25 фев 03, 16:10    [135079]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Garya
Member

Откуда: Москва
Сообщений: 31862
Блог
А как ты определил, что тормозит именно сервер, а не клиент?
25 фев 03, 20:05    [135276]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
2 Garya

Ну, дела. Запустил в Query Analyzer эту процедуру, а там она выполняется на Ура, меньше секунды. Получается это не сервер, а клиент? Так что ли?
И чего мне теперь делать?
Не знаешь в чем может быть дело?
26 фев 03, 10:57    [135534]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Яж тебе в первом посте уже писАл, что не в серваке дело. Смотри, че ты делаешь на клиенте.
26 фев 03, 11:00    [135537]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
А куда смотреть-то? Где могут быть грабли?

Вот свойства adostoredproc:

CursorLocation - clUseClient
CursorType - ctStatic
LockType - ltBatchOptimistic
MarshalOptions - moMarshalAll
Prepared - false

А тормозит, когда второй раз запускаю процедуру:

adostoredproc.active:=false

adostoredproc.active:=true Вот здесь
26 фев 03, 11:16    [135552]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Если это все, и нет никаких обработчиков, ну типа AfterOpen или BeforeOpen, тады ОЙ. Попробуй LockType поставь ltReadOnly. Для интереса, хотя бы. Может себя так режим BatchUpdate ведет.
26 фев 03, 11:22    [135556]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
Есть обработчики: BeforePost и AfterPost. Причем Выполнение запроса стоит в AfterPost. А что тут может быть не так?
26 фев 03, 11:29    [135561]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
>Причем Выполнение запроса стоит в AfterPost.

Выполнение какого запроса. Слушай, тут у тебя уже второй запрос нарисовался. Опиши алгоритм взаимодействия наборов, может в них собака порылась.
26 фев 03, 11:37    [135568]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
Дело обстоит так:

Есть хранимая процедура, которая возвращает набор данных (которая тормозит, при втором запуске).
Она выполняется через компонент adostoredproc, свойства приведены выше.
Данные отображаются в DbGridEh.
После того, как юзер редактирует поле в Гриде, срабатывает обработчик BeforPost у компоненты adostoredproc.
В нем я через другую ХП редактирую измененную юзером запись. Это делается, так как у adostoredproc стоит LockType - ltBatchOptimistic и данные не попадают в Базу.
Затем в обработчике adostoredproc.AfterPost я обновляю данные в Гриде, чтобы увидеть измененные данные вот так:

adostoredproc.active:=false;

adostoredproc.active:=true;


И вот здесь при втором редактировании юзером в Гриде, происходят тормоза.
26 фев 03, 11:52    [135584]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Слушай, а зачем ты второй раз открываешь процедуру. Ну изменил данные, ну сохранил. Или в этой записи у тебя еще и на серваке что-нибудь пересчитывается.

А вообще, ну не делают так. Уж если у тебя ltBatchOptimistic, то внеси все изменения в набор и сохрани их одним махом.

Топик пора переводить в Программирование->Delphi.
26 фев 03, 12:02    [135592]     Ответить | Цитировать Сообщить модератору
 Re: Почему ВТОРОЕ выполнение запроса тормозит?  [new]
Cooper
Member

Откуда: Фром Москоу
Сообщений: 3939
Так не получится. Потому как набор данных, который возвращает эта процедура, берется из разных таблиц (объедененных Union). А сохранять надо в одной определенной. Поэтому я и использую Batch Optimistic. И через ХП делаю изменения. Так что через Грид нельзя.
А обновление делаю, чтобы увидеть изменения, некоторые поля должны быть пересчитаны.
26 фев 03, 12:10    [135609]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить