powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
8 сообщений из 8, страница 1 из 1
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40036526
Добрый день

Загружаю в приложение 4000 записей из таблицы с тремя полями типа Blob (В базе на которой проверял поля BLOB SUB_TYPE 1 SEGMENT SIZE 512 CHARACTER SET WIN1251, но если BLOB SUB_TYPE 0 проблема точно такая же). Если экспортировать все данные из таблицы вместе с BLOB в IbExpert в файл, то размер файлов меньше 4.5 Mb.
В локальной сети все работает быстро, но если подключаться к Firebird 3.0 через Интернет (ping 23 мсек, MTU не измерял) и выполнять этот же запрос с фетчем всех записей, то время выполнения SQL запроса увеличивается катастрофически
Если изменить SQL запрос - преобразовать BLOB на стороне сервера в VARCHAR то работает быстро. Вот так преобразовываю: (cast(cast(onchangescript as blob sub_type 1 character set win1251) as varchar(32000)) as onchangescript)

Время выполнения запроса и фетча всех данных (результат запроса загружается в кэш). Проверял в UniDAC, FireDAC и на всякий случай в BDE. Перебирал параметры этих библиотек связанные с BLOB, но так как я фетчу все записи, то улучшить время не получилось. Результаты практически не отличаются:

По локальной сети:
0.5 сек
c преобразованием в VarСhar: 0.3 сек

Через Интернет:
100 сек
c преобразованием в VarСhar: 4 сек


Смотрел трафик в WireShark, такое ощущение, что при использовании BLOB резко увеличивается количество TCP пакетов и это приводит к падению производительности в 25 раз.
Параметр WIRECOMPRESS не уменьшает время выполнения.

Вопрос: Это проблема пары fbclient.dll - сервер или компоненты доступа (UniDAC, FireDAC) как то неправильно работают?
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40036528
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим Мещеряков,

нет это особенности работы с типом BLOB. В отличии от других типов блобы при фетче записи не извлекаются сразу а получают только идентификатор блоба. Затем блоб вытаскивается отдельно, для чего нужно минимум 3 сетевых пакета открыть блоб, прочитать сегмент (это может повторится много раз в зависимости от размера), закрыть блоб. Кроме того для VARCHAR есть и другая оптимизация. Обычно когда делается фетч записи, срабатывает префетч и вытаскивается сразу несколько записей, которые помещаются в сетевой пакет и дальнейшие фетчи не требуют сетевых пакетов, пока записи есть в буфере. Для блобов это не работает
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40036530
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тут я подробности писал 22013340
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40036531
Симонов Денис,

Спасибо!
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40036538
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но и компоненты тоже могут вносить свою лепту если они пытаются получить размер блоба
перед его вычиткой, например.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40039353
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Плохо, что при наличии блоба на странице нет никаких инструментов для его префетча (например, флага какого-нибудь). Много лет назад Бузаджи задавался аналогичным вопросом 3085562 .

Вообще в Firebird-е беда с такими строковыми данными, длины которых могут варироваться в широких пределах. Если использовать для этого VARCHAR строки "с запасом", скажем 1000 символов, то таблица пухнет от пустого остатка строки. Если для строки в WIN1251 это не сильно заметно, строка в 1000 символов сожмется до 1000/60=16 байт, то для UTF8 это уже будет в 4 раза больше. А если "запаса" не хватает, и надо больше 2000, 3000, 4000 символов? Тогда большую часть записи будет занимать пустота!

Если же использовать BLOB, то тут другие проблемы: проседание скорости фетча на медленных каналах (и компрессия трафика тут как мертвому припарка) и создание версий BLOB-ов при каждом тыке.
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40039357
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
то таблица пухнет от пустого остатка строки
Сам проверил?
...
Рейтинг: 0 / 0
Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
    #40039365
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

Про длинный varchar. Улучшение алгоритма сжатия записей было отложено, увы.
Теперь в этом направлении будет что-то сделано наверное не раньше 5ки.

Что касается блобов, то там тоже есть что сделать
1. Можно делать префетч и соединять пакеты open/get_segment хотя бы для чтения первого сегмента для сегментированных блобов
2. Доработать поточные блобы, чтобы seek работал для блобов больше 2Гб
3. В getInfo дать возможность получать длину блобов для блобов больше 2Гб. B кстати getInfo можно было бы соединить с open по крайней мере для определения размера блоба и внести отдельный метод getSize в IBlob.
4. Снять в ODS ограничения на уровни блоба, чтобы можно было хранить блобы больше 32Гб. Вот на это можно забить
5. Дать возможность собирать блобы из строк без создания временных блобов. Уже есть PR с пакетом BLOB_UTILS который позволяет так собирать поточные блобы. Может быть войдёт в 4.1
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Медленная выполняются SQL с BLOB полями при подключении к серверу по VPN через Интернет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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