Re[2]: Медленная работа связки ADO с MS SQL Server
От: barbanel  
Дата: 11.08.23 15:27
Оценка:
Здравствуйте, wety, Вы писали:

Спасибо за ответ!

W>1. Интересует точно ли ситуация с 5 секундами воспроизводится регулярно?

Да.

W>2. Запрос с TBetterAdoDataset выполняется с той же самой машины, с которой выполняется и тот самый долгий запрос?

Да.

W>3. Параметры (value) идентичны?

Нет, но это не имеет значения, т.к. фактически Value это ID записи.

W>4. Что с планом запроса? Интересует есть ли покрывающий индекс в базе данных?

Дело железобетонно не в запросе, не в индексах и не в плане запроса.
Другое приложение работает с этой же БД нормально.

W>Также вот ссылки, чтобы поразмышлять: https://groups.google.com/g/borland.public.delphi.database.ado/c/3H82a_CAdO4?pli=1

W>http://www.delphigroups.info/2/56/218124.html

W>В целом, должно быть вот так:

W>1. CursorLocation — Server
W>2. CursorType — OpenForwardOnly
W>3. ExecuteOptions — ASyncFetch
W>4. CacheSize — some small number like 20.
W>В противном случае, TBetterAdoDataset всё же будет быстрее.
Спасибо, это интересно.

По поводу CursorLocation:
В нашем приложении CursorLocation был выставлен в серверный и приложение при это общается с сервером БД заметно медленнее.
Запустив профайлер MS SQL мы заметили что в случае серверного курсора приложение запрашивает (ну или сервер отдает, мы пока не разобрались) записи по одной.
Т.е. не скажем 30 или 200 или еще больше, а именно по одной. В случае клиентского курсора, весь ответ сервера отправляется одним "пакетом", и работает в нашем случае это заметно быстрее.
В связи с этим, мы полагаем что мы не знаем о какой-либо специфичной настройке (или свойстве, или методе whatever), которая указывает количество записей, которое должен вернуть сервер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.