powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Медленное получение данных через TFDQuery (FireDAC)
9 сообщений из 59, страница 3 из 3
Медленное получение данных через TFDQuery (FireDAC)
    #39124084
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan"мощно задвинул, внушает" (С)
прошу назвать концептуальные отличия у разных серверов и клиентов в схеме prepare->execute->fetch. Или хотя бы execute->fetch.
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124108
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BТам скорее всего ADO.Net.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
  des1.client_interface_name,
  dec1.net_transport,
  dec1.protocol_type
FROM
  sys.dm_exec_sessions AS des1
  JOIN sys.dm_exec_connections AS dec1
    ON dec1.session_id = des1.session_id
WHERE
  des1.session_id = @@SPID


Скорее всего .Net SqlClient Data Provider
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124122
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvпрошу назвать концептуальные отличия у разных серверовна столь высоком уровне концептуально они конечно все субд а на практике под капотом такого наверчено может быть что ожидать безусловного мгновенного отклика увы не приходится
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124175
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan а на практике под капотом такого наверчено может быть
про это я не говорю, и с этим не спорю, оптимизаторы у всех разные, но еще раз подчеркиваю, что самый простой запрос для тестирования скорости выборки, для всех СУБД выполняемый максимально быстро, это
select * from table.
Т.е. одна таблица, никаких условий отбора, группировок, сортировок, серверных курсоров и всего такого.
Такой запрос готов выдавать записи за миллисекунды. А вот уже сколько времени будут выдаваться записи, зависит от многих факторов, включая сеть, если курсор серверный, компоненты, и т.д.
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124194
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще деталей множество. Если в запросе блобы? У SSMS например по умолчанию все строки не более 256 символов в показе (не знаю хранит ли он полные строки). И.т.д. Записи он буферизирует - иначе бы грид для показа не прокручивался в обе стороны.
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124422
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял что автор сравнивает
Код: pascal
1.
2.
FireDacDataSet.First;
While not FireDacDataSet.Eof do FireDacDataSet.Next;


и
Код: pascal
1.
2.
ADODataSet.First;
ADODataSet.Last;



Где 1-й последовательно выкачивает все 140 т.з, а второй 50 первых+50 последних?
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124469
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreatЯ правильно понял что автор сравнивает
Код: pascal
1.
2.
FireDacDataSet.First;
While not FireDacDataSet.Eof do FireDacDataSet.Next;


и
Код: pascal
1.
2.
ADODataSet.First;
ADODataSet.Last;



Где 1-й последовательно выкачивает все 140 т.з, а второй 50 первых+50 последних?
а с чего Last вычитывает именно 50 последних ?
...
Рейтинг: 0 / 0
Медленное получение данных через TFDQuery (FireDAC)
    #39124477
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последние 50 выкачивает только TFDTable в режиме LiveWindow. Там особая уличная магия. TFDQuery так не делает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Медленное получение данных через TFDQuery (FireDAC)
    #40104849
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и я наткнулся на эту проблему в совсем ином разрезе. MSSQL, FireDac, D10.4.2, MS ODBC Driver 17.

Проблема была fetch'е запросов по 1 записи, даже не содержащих блобов в середине

Решилось так:
1 - тип курсора Forward Only.
2 - убрать в в исходниках выставление CUSROR_OPTIONS - Fast Forward Only - иначе принудительный серверный тип курсора (8)
3 - после закрытия стейтмента выставить ROW_ARRAY_SIZE = 1, в противном случае всё свалится опять в серверный курсор. Стейтмент открывается при ROW_ARRAY_SIZE = 1 и только потом, перед fetch выставляется правильный ROW_ARRAY_SIZE (это FireDac и так делает)

В итоге чтение происходит порциями, указанными в FetchOptions а не всегда по 1. На VPN есть выигрыш.
...
Рейтинг: 0 / 0
9 сообщений из 59, страница 3 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Медленное получение данных через TFDQuery (FireDAC)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]