Пул внешних подключений (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 |
Текущее количество активных соединений в пуле. |