ПРИМЕЧАНИЕ. Я не знаю ни Delphi, ни FireDAC, этот ответ основан на общем поведении Firebird и моем опыте поддержки его драйвера JDBC (Jaybird).Поэтому вполне возможно, что есть лучший ответ специально для FireDAC / Delphi.
Включение или отключение проводного сжатия полностью определяется клиентом, а не сервером.Это означает, что настройка сервера не является необходимой и не оказывает никакого влияния, за исключением случаев, когда сам сервер выступает в роли клиента, например, с execute statement ... on external datasource
.
Чтобы использовать сжатие по проводам, вынужно три вещи:
fbclient.dll
zlib1.dll
(в том же месте, что и fbclient.dll
или в пути поиска) - Конфигурация длявключить сжатие проводов для клиента
Вероятно, проблема в точке 3: я не уверен, что у FireDAC есть свойство подключения WireCompression
, которое фактически включает сжатие проводов.
Я знаюиз двух способов включить сжатие проводов для клиента:
Создайте firebird.conf
в том же каталоге, что и fbclient.dll
, используемый вашим приложением.В этот файл конфигурации поместите запрошенные параметры конфигурации (по одному на строку):
WireCompression = true
# maybe other config lines (eg AuthClient, WireCrypt, etc)
Вместо создания файла firebird.conf
передайте конфигурацию (с разрывами строк, разделяющими параметры конфигурации)в элементе параметра базы данных isc_dpb_config
(int 87).
Значение совпадает с содержимым файла firebird.conf
в предыдущем параметре.Это может привести к проблемам с размером, если клиент использует старый формат буфера параметров базы данных (где строки имеют максимальный размер 255 байт), и вы хотите передать (много) больше параметров конфигурации.
Вариант 1, вероятно, самый простой и будет работать для всех платформ.Вариант 2 зависит от того, предоставляет ли каркас или драйвер буфер параметров базы данных или если у него есть свойство подключения, которое отображается на isc_dpb_config
.
Например, в Java с использованием Jaybird вы можете включить сжатие (только когдаиспользуя собственные соединения) с помощью:
Properties props = new Properties();
props.setProperty("user", "sysdba");
props.setProperty("password", "masterkey");
props.setProperty("config", "WireCompression=true");
try (var connection = DriverManager.getConnection(
"jdbc:firebirdsql:native:localhost:D:/data/db/fb3/fb3testdatabase.fdb", props)) {
FirebirdConnection fbCon = connection.unwrap(FirebirdConnection.class);
FbDatabase fbDatabase = fbCon.getFbDatabase();
System.out.println(fbDatabase.getServerVersion());
} catch (SQLException e) {
e.printStackTrace();
}
Выводится WI-V3.0.4.33054 Firebird 3.0,WI-V3.0.4.33054 Firebird 3.0/tcp (host)/P15:CZ,WI-V3.0.4.33054 Firebird 3.0/tcp (host)/P15:CZ
(обратите внимание, это <server version>,<server protocol info>,<client protocol info>
)
Здесь свойство config
является псевдонимом для isc_dpb_config
.