Пул внешних подключений (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
:
Переменная | Описание |
---|---|
EXT_CONN_POOL_SIZE |
Размер пула. |
EXT_CONN_POOL_LIFETIME |
Время жизни неактивных соединений. |
EXT_CONN_POOL_IDLE_COUNT |
Текущее количество неактивных соединений в пуле. |
EXT_CONN_POOL_ACTIVE_COUNT |
Текущее количество активных соединений в пуле. |