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 это то, что тайм-аут не сработает раньше указанного момента.