FirebirdSQL logo

ON EXTERNAL [DATA SOURCE]

С предложением ON EXTERNAL DATA SOURCE оператор выполняется в отдельном соединении с той же или другой базой данных, возможно даже на другом сервере.Если строка подключения имеет значение NULL или '' (пустая строка), предложение ON EXTERNAL считается отсутствующим и оператор выполняется для текущей базы данных.Строка подключения подробно описана в операторе CREATE DATABASEсм. Создание БД на удалённом сервере.

При выполнении оператора в отдельном соединении используется пул соединений и пул транзакций.

Пул внешних подключений (External connection pool)

Чтобы избежать задержек при частом использовании внешних соединений, подсистема внешних источников данных (EDS) использует пул внешних подключений.Пул сохраняет неиспользуемые внешние соединения в течении некоторого времени, что позволяет избежать затрат на подключение/отключение для часто используемых строк подключения.

Как работает пул соединений:

  • каждое внешнее соединение связывается с пулом при создании;

  • пул имеет два списка: неиспользуемых соединений и активных соединений;

  • когда соединение становится неиспользуемым (т. е. у него нет активных запросов и нет активных транзакций), то оно сбрасывается и помещается в список ожидающих (при успешном завершении сброса) или закрывается (если при сбросе произошла ошибка). Соединение сбрасывается при помощи инструкции ALTER SESSION RESET. Сброс считается успешным, если не возникла ошибка.

    Note

    Если внешний источник данных не поддерживает оператор ALTER SESSION RESET, то это не считается ошибкой, и такое соединение будет помещено в пул.

  • если пул достиг максимального размера, то самое старое бездействующее соединение закрывается;

  • когда Firebird просит создать новое внешнее соединение, то пул сначала ищет кандидата в списке простаивающих соединений. Поиск основан на 4 параметрах:---

    • строка подключения;

    • имя пользователя;

    • пароль;

    • роль.

    Поиск чувствителен к регистру;

  • если подходящее соединение найдено, то проверятся живое ли оно;

  • если соединение не прошло проверку, то оно удаляется и поиск повторяется (ошибка не возвращается пользователю);

  • найденное (и живое) соединение перемещается из списка простаивающих соединение в список активных соединений и возвращается вызывающему;

  • если имеется несколько подходящих соединений, то будет выбрано наиболее часто используемое;

  • если нет подходящего соединения, то создаётся новое и помещается в список активных соединений;

  • когда время жизни простаивающего соединения истекло, то оно удаляется из пула и закрывается.

Основные характеристики:

  • отсутствие “вечных” внешних соединений;

  • ограниченное количество неактивных (простаивающих) внешних соединений в пуле;

  • поддерживает быстрый поиск среди соединений (по 4 параметрам указанным выше);

  • пул является общим для всех внешних баз данных;

  • пул является общим для всех локальных соединений, обрабатываемых данным процессом Firebird.

Параметры пула внешних соединений:

  • время жизни соединения: временной интервал с момента последнего использования соединения, после истечения которого он будет принудительно закрыт. Параметр ExtConnPoolLifeTime в firebird.conf. По умолчанию равен 7200 секунд;

  • размер пула: максимально допустимое количество незанятых соединений в пуле. Параметр ExtConnPoolSize в firebird.conf. По умолчанию равен 0, т.е. пул внешних соединений отключен.

Пулом внешних соединений, а также его параметрами можно управлять с помощью специальных операторов.Подробнее см. ALTER EXTERNAL CONNECTIONS POOL.

Состояние пула внешних подключений можно запросить с использованием контекстных переменных в пространстве имен SYSTEM:

Table 1. Переменные пространства имён SYSTEM для контроля пула внешних соединений
Переменная Описание

EXT_CONN_POOL_SIZE

Размер пула.

EXT_CONN_POOL_LIFETIME

Время жизни неактивных соединений.

EXT_CONN_POOL_IDLE_COUNT

Текущее количество неактивных соединений в пуле.

EXT_CONN_POOL_ACTIVE_COUNT

Текущее количество активных соединений в пуле.