Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
Добрый день

Хочу для части клиентов включить сжатие данных.

В Release Notes написано:

To activate Wirecompression from the client side, pass the appropriate tag in the config item of the DPB
or SPB call:
isc_dbp_config/isc_sbp_config <string-length> "WireCompression=true"

Подскажите, пожалуйста,
если в firebird.conf на клиенте добавить WireCompression = True будет работать сжатие или нужно в компонентах доступа к данным передавать этот параметр во время коннекта?
15 фев 17, 09:10    [20212686]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6851
вроде должно работать. Проверить было бы быстрее, чем сюда писать :-) Только не забудь скопировать zlib1.dll в папку клиента.
15 фев 17, 09:41    [20212783]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6851
к вопросу "как проверить". Либо запустить с клиента ISQL, подключиться к базе на сервере и запросить show version. Либо с клиента прочитать MON$REMOTE_VERSION из MON$ATTACHMENTS для своего коннекта. В обоих случаях посмотреть на версию сетевого протокола, там будет PNN[:XY], где NN - версия протокола, а опциональные XY - флаги 'C' при включенном шифровании и 'Z' при включенном сжатии. Т.е., например, P13:Z означает включенное сжатие.
15 фев 17, 09:49    [20212811]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
dimitr,
Сервер 64 бита
Проверяю в RDP сеансе на сервере
автор
ISQL show version
показывает P14:C - все отлично.

1. Подключаюсь к базе в IbExpert (указываю в настройке подключения fbclient.dll)
Версия протокола P14
2. Рядом с IbExpert кладу fbclient.dll, zlib1.dll (оба из дистрибутива 32 битного сервера) а потом еще и firebird.conf, в настройке подключения указываю полный путь до fbclient.dll
Версия протокола всегда P14
15 фев 17, 10:59    [20213099]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
hvlad
Member

Откуда:
Сообщений: 10266
Вадим Мещеряков,

какая строка коннекта в IBE ?
15 фев 17, 11:13    [20213164]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
hvlad
какая строка коннекта в IBE ?


В IbExpert отображается такая строка: LOCALHOST/3050:G:\DelFin\Db\BASE.FDB
15 фев 17, 11:21    [20213196]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6851
Вадим Мещеряков
показывает P14:C - все отлично

это включено шифрование, а не сжатие. Что же тут отличного?
15 фев 17, 11:22    [20213199]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
dimitr
это включено шифрование, а не сжатие. Что же тут отличного?

Наврал там было /P14:CZ
15 фев 17, 11:25    [20213215]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
Вадим Мещеряков,

ISQL Version: WI-V3.0.1.32609 Firebird 3.0
Server version:
Firebird/Windows/AMD/Intel/x64 (access method), version "WI-V3.0.1.32609 Firebird 3.0"
Firebird/Windows/AMD/Intel/x64 (remote server), version "WI-V3.0.1.32609 Firebird 3.0/tcp (SRV-DELFIN)/P14:CZ"
Firebird/Windows/AMD/Intel/x64 (remote interface), version "WI-V3.0.1.32609 Firebird 3.0/tcp (SRV-DELFIN)/P14:CZ"
15 фев 17, 11:27    [20213221]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
dimitr
к вопросу "как проверить". Либо запустить с клиента ISQL, подключиться к базе на сервере и запросить show version. Либо с клиента прочитать MON$REMOTE_VERSION из MON$ATTACHMENTS для своего коннекта


Странные вещи
ISQL show version показывает /P14:CZ

В тестовом приложении (с FireDAC) показывает

Server version = WI-V3.0.1.32609 Firebird 3.0
WI-V3.0.1.32609 Firebird 3.0/tcp (SRV-DELFIN)/P14:CZ
WI-V3.0.1.32609 Firebird 3.0/tcp (promservice001)/P14:CZ

А в MON$ATTACHMENTS.MON$REMOTE_VERSION показывает для этих же подключений P14

Как модно понять работает сжатие или нет?
15 фев 17, 13:33    [20213937]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2644
Вадим Мещеряков, WireShark ?
15 фев 17, 14:31    [20214264]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
rdb_dev
WireShark ?

Это понятно что можно трафик смотреть, но хлопотно.

Если рядом с моим тестовым приложением и fbclient.dll лежит firebird.conf то можно включить сжатие изменением параметра в этом файле. Отключить шифрование изменением параметра в этом же файле не получается
15 фев 17, 14:52    [20214339]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
rdb_dev,

Провел эксперимент
Установил на сервере WireShark
Поставил фильтр от сервера к клиенту
Сложил fbclient.dll, zlib1.dll,firebird.conf в каталог с IbExpert. Запустил из жтого каталога тестовую программу (FireDAC) показала P14:CZ
Запустил IbExpert (явно указал где ему взять fbclient.dll)
Cделал выборку с полным фетч 10000 записей с включенным в файле firebird.conf WireCompress и с выключенным
Примерно одинаковое количество пакетов 210
Одинаковый суммарный объем пакетов 760000 байт

Не работает сжатие?
Как его все таки запустить?
16 фев 17, 17:43    [20218835]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
hvlad
Member

Откуда:
Сообщений: 10266
Вадим Мещеряков
Сложил fbclient.dll, zlib1.dll,firebird.conf в каталог с IbExpert.
...
Запустил IbExpert (явно указал где ему взять fbclient.dll)
Где-то тут кто-то ошибся. И - зачем делать первое, при наличии второго ?

Возьми Process Explorer и проверь - какую версию fbclient на самом деле использует IBE, и загружает ли он при этом zlib1
16 фев 17, 17:50    [20218867]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Вадим Мещеряков
Member

Откуда:
Сообщений: 32
hvlad
Где-то тут кто-то ошибся


Так и есть!
Все отлично работает!

Для включения сжатия нужно положить firebird.conf (WireCompression = true) и zlib1.dll рядом c fbclient.dll. и Все.
Результат в нашем приложении (анализировал трафик от сервера к клиенту) - в 3 раза меньше пакетов а общий размер пакетов меньше в 10 раз.

Спасибо за помощь.
16 фев 17, 20:10    [20219251]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
hvlad
Member

Откуда:
Сообщений: 10266
Вадим Мещеряков,

вот и прекрасно :)
16 фев 17, 21:53    [20219536]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как включить WireCompression на клиентах?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8282
Апну старый топик, тоже решил научиться компрессовать трафик.
беру ISQL вроде бы вижу вожделенные буковки "P15:Z"
SQL> show version;
ISQL Version: LI-V3.0.5.33100 Firebird 3.0
Server version:
Firebird/Linux/AMD/Intel/x64 (access method), version "LI-V3.0.5.33100 Firebird 3.0"
Firebird/Linux/AMD/Intel/x64 (remote server), version "LI-V3.0.5.33100 Firebird 3.0/tcp (linux-ivan32)/P15:Z"
Firebird/Linux/AMD/Intel/x64 (remote interface), version "LI-V3.0.5.33100 Firebird 3.0/tcp (linux-ivan32)/P15:Z"
on disk structure version 12.0
SQL> select MON$REMOTE_VERSION from MON$attachments;

MON$REMOTE_VERSION
===============================================================================
<null>
<null>
P15
P15
P15
P15

SQL>

dimitr
Либо с клиента прочитать MON$REMOTE_VERSION из MON$ATTACHMENTS для своего коннекта.
А вот тут буковок не вижу, см. выше выхлоп ISQL.

Кому верить?

да, среди 4 конектов из атачмента есть виндовый, мой виндовый клиент подхватил троешного ФБ клиента, а тот в свою очередь прихватил zlib1.dll (судя по процесс эксплореру).
12 фев 19, 18:52    [21807758]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9467
Ivan_Pisarevsky,

там и не должно быть.
В 4.0 появились отдельные поля MON$WIRE_COMPRESSED и MON$WIRE_ENCRYPTED
12 фев 19, 19:46    [21807804]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
vvvait
Member

Откуда:
Сообщений: 74
Подскажите, получается что сжатие данных бессмысленно на каналах с большими задержками (100-150 мс). т.к. судя по wireshark 90% пакетов идёт размером 50-80 байт, данных в которых от 9 до 40 байт, вместо 16-64 байт без сжатия.
Может можно какими-либо настройками уменьшить кол-во пакетов?
13 май 19, 14:29    [21883398]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9467
vvvait
Подскажите, получается что сжатие данных бессмысленно на каналах с большими задержками


не то чтобы бессмысленно, но помогает мало.

Одна из настроек которая может повлиять TcpRemoteBufferSize.
Но лучше всего прошерстить код приложения, чтобы метаданные лишний раз не запрашивались, использовались препарированные запросы, в запросах лишние поля не таскать, чтобы блобы не грузились когда не надо. Можно всяческое кеширование включать, чтобы повторно не таскать
13 май 19, 15:02    [21883467]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
hvlad
Member

Откуда:
Сообщений: 10266
vvvait
Может можно какими-либо настройками уменьшить кол-во пакетов?
Нет таких настроек.
Нужно убедиться, что версия клиента не ниже 2.5.
Про сервер ниже 2.5 даже не говорю.
Если всё так и есть - остаётся только оптимизирвать приложение.
13 май 19, 15:10    [21883480]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
vvvait
Member

Откуда:
Сообщений: 74
я эти данные для бакапа метаданных привёл, gbak я оптимизировать наверно не могу
13 май 19, 15:32    [21883509]     Ответить | Цитировать Сообщить модератору
 Re: Как включить WireCompression на клиентах?  [new]
hvlad
Member

Откуда:
Сообщений: 10266
vvvait,

есть много способов сделать бекап. В том числе когда клиент и сервер на разных хостах.

Если файл бекапа не нужен на клиенте, то следует вызвать gbak через сервисы, далее как обычно

gbak -se server:service_mgr -b -g path.fdb backup.fbk

тут оба пути локальны на сервере server


Если файл бекапа нужен на клиенте, то следует воспользоваться фичей CORE-2666

как пользоваться - см README.services_extension
4) Services API extension - running gbak at server side with .fbk at the client.
13 май 19, 16:13    [21883551]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить