FirebirdSQL logo

SET STATEMENT TIMEOUT

Назначение

Установка тайм-аута выполнения SQL операторов на уровне соединения.

Доступно в

DSQL

Синтаксис:
SET STATEMENT TIMEOUT value [HOUR | MINUTE | SECOND | MILLISECOND]
Table 1. Параметры оператора SET STATEMENT TIMEOUT
Параметр Описание

value

Значение тайм-аута выполнения SQL операторов в указанных единицах измерения времени.Если единица измерения времени не указано, то по умолчанию значение тайм-аута измеряется в секундах.

Устанавливает значение тайм-аута выполнения SQL операторов на уровне текущего соединения.Если единица времени не указана, то по умолчанию тайм-аут будет учитываться в секундах.

Note

Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно.

Example 1. Установка тайм-аута выполнения SQL оператора
SET STATEMENT TIMEOUT 2 MINUTE
Note

Интерактивный инструмент isql дополнительно поддерживает команду:

SET LOCAL_TIMEOUT int

Эта команда позволяет установить тайм-аут выполнения оператора (в миллисекундах) для следующего оператора.После выполнения SQL оператора он автоматически сбрасывается в ноль.

Тайм-аут простоя соединения

Данная функциональность позволяет автоматически закрывать пользовательские подключения после периода бездействия.Она может быть использована администраторами баз данных, чтобы принудительно закрывать старые неактивные соединения и освобождать связанные с ними ресурсы.Приложения и инструменты разработчика могут использовать её как замену самодельного контроля за временем жизни подключения.

Рекомендуется (но не обязательно) устанавливать тай-аут простоя в разумное большое значение, например, несколько часов.По умолчанию эта функция отключена.

Эта функциональность работает следующим образом.Когда пользовательский вызов API покидает движок, запускается специальный таймер связанный с текущим подключением.Как только пользовательский вызов входит в движок, таймер ожидания останавливается.Если тайм-аут простоя истечёт движок закроет соединение так как будто произошло асинхронная отмена подключения:

  • все активные операторы и курсоры закрываются;

  • все активные транзакции откатываются;

  • сетевые соединения не закрываются в данный момент. Это позволяет клиентскому приложение получить точный код ошибки при следующем вызове API. Сетевое соединение будет закрыто на стороне сервера после того, как ошибка сообщена, или если клиентская сторона отключится по истечению тайм-аута сети.

Тайм-аут простоя соединения может быть установлен:

  • На уровне базы данных. Значение параметра ConnectionIdleTimeout может быть установлено в firebird.conf (или databases.conf) администратором базы данных. Область действия все пользовательские подключения, исключая системные подключения (garbage collector, cache writer, и др.). Параметр ConnectionIdleTimeout устанавливает тайм-аут в минутах, по истечении которого неактивное соединение будет разорвано движком. Ноль означает, что тайм-аут не установлен. Значение по умолчанию равно 0.

  • На уровне подключения. Может быть установлен с использованием API (в секундах) или с помощью SQL оператора SET SESSION IDLE TIMEOUT. Область действия все операторы в текущем подключении.

Эффективное значение тайм-аута простоя вычисляется каждый раз, когда пользовательский вызов API покидает движок, следующим образом:

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

  • значение тайм-аута не может быть больше, чем значение установленное на уровне базы данных. Таким образом, значение тайм-аута простоя может перекрываться разработчиком приложения для заданного подключения, но оно не может выти за пределы установленные DBA в конфигурации.

Нулевой тайм-аут не обозначает отсутствие тайм-аута, просто в этом случае таймер ожидания не запускается.

Несмотря на то, что тайм-аут простоя может быть установлен в секундах, абсолютная точность не гарантируется.При высокой нагрузке он может быть менее точным.Единственная гарантия которую может дать Firebird это то, что тайм-аут не сработает раньше указанного момента.

SET SESSION IDLE TIMEOUT

Назначение

Установка тайм-аута простоя соединения на уровне соединения.

Доступно в

DSQL.

Синтаксис
SET SESSION IDLE TIMEOUT value [HOUR | MINUTE | SECOND]
Table 1. Параметры оператора SET SESSION IDLE TIMEOUT
Параметр Описание

value

Значение тайм-аута простоя в указанных единицах измерения времени.Если единица измерения времени не указано, то по умолчанию значение тайм-аута измеряется в минутах.

Устанавливает значение тайм-аута простоя на уровне текущего соединения.Если единица времени не указана, то по умолчанию тайм-аут будет учитываться в минутах.

Note

Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно.

Example 1. Установка тайм-аута простоя соединения
SET SESSION IDLE TIMEOUT 8 HOUR

Пул внешних соединений

Каждое внешнее соединение (созданное оператором EXECUTE STATEMENT …​ ON EXTERNAL) при создании связываетсяс пулом соединений (подробнее см. Пул внешних подключений).Данная группа операторов позволяет управлять пулом внешних соединений.При его подготовке они описываются как DDL операторы, но имеют немедленный эффект: то есть они выполняются немедленно и полностью, не дожидаясь фиксации транзакции.Изменения применяются к экземпляру пула в памяти в текущем процессе Firebird.Поэтому изменение в одном классическом процессе не влияет на другие классические процессы.Изменения не являются постоянными и после перезапуска Firebird будет использовать настройки пула из firebird.conf.

Для выполнения операторов данной группы требуется системная привилегия MODIFY_EXT_CONN_POOL.Подробнее о системных привилегиях см. [fblangref-security-roles-create].