Советы дня. Работа с Firebird 2.5 через связанный сервер.

Привет всем.

Вчера консультировал клиента, по поводу ряда проблем при работе с базой под FB2.5 через связанный сервер MSSQL. Используется встроенный клиент для Firebird (dbclient_type=fb.direct).

Проблема #1
Первый запрос к базе выполняется около 30 секунд.

Причина заключается в том, что MSSQL читает метаданные конструкций, используемых в запросе. По умолчанию IBProvider грузит и кэширует все данные для каждой схемы. То есть, MSSQL хочет получить данные по колонкам для одной таблицы. А провайдер, чтобы два раза не вставать, загружает данные о колонках всех таблиц и представлений (VIEW).

Это поведение можно изменить, указав в строке подключения «schema_cache=0».

Проблема #2
Странные ошибки в логе сервера.

SVRERP01 Mon Sep 14 14:59:59 2020
SERVER/process_packet: connection rejected for SQLSERVERAGENT.-1.-1

Провайдер, по умолчанию, сначала пытается подключиться к FB с использованием 13-го протокола (FB3). Других протоколов он не предлагает. Потом он пытается подключиться с использованием 12, 11 и 10-го протоколов.

FB2.5 как раз на эту первую попытку и ругается.

Указываем в строке подключения «remote:protocol=12» и заставляем провайдер сразу использовать правильный протокол.

Проблема #3
До кучи, указал на то, что в строке подключения используется устаревший (хотя и рабочий) вариант указания сервера и базы данных — «SERVERNAME:d:\database\DB.FDB».

Провайдер (точнее Windows) может сначала пытаться подключаться к серверу через TCP/IP v6, а потом через TCP/IP v4.

Firebird 2.5 не поддерживает TCP/IP v6.

Имеет смысл явно указывать версию TCP/IP v4 в строке подключения, используя «новый» формат описания расположения базы данных — «inet4://SERVERNAME/d:\database\DB.FDB».

Это ощутимо сократит время подключения к базе данных под/на FB2.5.

Leave a Comment