Очень медленная скорость выборки данных из удаленной базы Firebird

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Закрыто
alexey_koptsev
Сообщения: 4
Зарегистрирован: Ср 21 окт 2015 05:03

Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение alexey_koptsev » Вт 30 авг 2016 09:30

Здравствуйте!

Имеется удаленный сервер Firebird, канал не очень быстрый. UniDAC демонстрирует очень медленную скорость простой выборки данных с такой базы. Пример:
Таблица - 12 полей, всего 204 записи.
При FetchRows = 1 открытие набора ~2 сек., перебор всех строк ~40 сек.
При FetchRows = 500 открытие набора ~40 сек., перебор всех строк, естественно, ~1 сек.
При тех же самых условиях FIBPlus демонстрирует нормальную скорость - открытие набора (выбирается 1 запись) ~2 сек., выборка всех строк ~2 сек.
Все это в рамках одного тестового приложения, используется одна и та же библиотека GDS32.dll. Никакие параметры для UniConnection и UniQuery не устанавливались, кроме параметров подключения к базе и FetchRows.
Перебор простой, в цикле:
while not UniQuery1.Eof do
begin
label2.caption := UniQuery1.FieldByName('FName').AsString;
UniQuery1.next;
label2.Refresh;
end;

Почему может быть такое значительное замедление?

ViktorV
Devart Team
Сообщения: 212
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение ViktorV » Вт 30 авг 2016 09:55

Для исследования данного поведения, пожалуйста, составьте и вышлите на viktorv*devart*com пример, воспроизводящий разницу в скорости при использовании компонентов UniDAC и FIBPlus, чтобы мы смогли дать вам более полный ответ.

ViktorV
Devart Team
Сообщения: 212
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение ViktorV » Вт 30 авг 2016 14:21

Данное поведение обусловлено присутствием в вашей таблице BLOB-полей. В компонентах FIBPlus по-умолчанию используется отложенная загрузка BLOB-полей, в то время как компоненты UniDAC по-умолчанию загружают данные BLOB-полей немедленно. За загрузку данных BLOB-полей отвечает свойство DeferredBlobRead, которое по-умолчанию установлено в False. Поэтому, для решение проблемы попробуйте установить свойство DeferredBlobRead в True:

Код: Выделить всё

  UniQuery.SpecificOptions.Values['DeferredBlobRead'] := 'True';
Вы можете получить дополнительную информацию о повышение производительности при использовании наших компонентов для работы с Firebird на нашем сайте: https://www.devart.com/ibdac/docs/index ... rmance.htm

alexey_koptsev
Сообщения: 4
Зарегистрирован: Ср 21 окт 2015 05:03

Re: Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение alexey_koptsev » Ср 31 авг 2016 09:18

Спасибо большое, решение помогло.

ViktorV
Devart Team
Сообщения: 212
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение ViktorV » Ср 31 авг 2016 09:31

Рады слышать, что проблема решена.
Обращайтесь к нам, если у Вас возникнут вопросы по UniDAC.

alexey_koptsev
Сообщения: 4
Зарегистрирован: Ср 21 окт 2015 05:03

Re: Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение alexey_koptsev » Чт 01 сен 2016 13:45

Подскажите, пожалуйста, а нет ли возможности определить данную опцию сразу для всех UniQuery, возможно на уровне Connection-а или еще где?

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Очень медленная скорость выборки данных из удаленной базы Firebird

Сообщение Alexp » Чт 01 сен 2016 14:07

Вы можете создать наследника от TUniQuery, и устанавливать это свойство в True по умолчанию.

Закрыто