SET BIND
Изменение привязки типа.Обеспечение совместимости со старыми клиентами.
SET BIND OF {<type-from> | TIME ZONE} TO { <type-to> | LEGACY | EXTENDED | NATIVE }
Параметр | Описание |
---|---|
type-from |
Тип данных для которого задаётся правило преобразования. |
type-to |
Тип данных в который следует преобразовать. |
Данный оператор позволяет задать правила описания типов возвращаемых клиенту нестандартным способом — тип type-from автоматически преобразуется к типу type-to.
Если используется неполное определение типа (например CHAR
вместо CHAR(n)
) в левой части SET BIND OF
приведения,то преобразование будет осуществляться для всех CHAR
столбцов, а не только для CHAR(1)
.
Специальный неполный тип TIME ZONE
обозначает все типы, а именно {TIME | TIMESTAMP} WITH TIME ZONE
.Когда неполное определение типа используется в правой части оператора (часть TO
),сервер автоматически определит недостающие детали этого типа на основе исходного столбца.
Изменение связывания любого NUMERIC
и DECIMAL
типа не влияет на соответствующий базовый целочисленный тип.Напротив, изменение привязки целочисленного типа данных также влияет на соответствующие NUMERIC
и DECIMAL
.
Ключевое слово LEGACY
в части TO
используется, когда тип данных, отсутствующий в предыдущей версии Firebird, должен быть представлен способом понятным для старого клиентского программного обеспечения (возможна некоторая потеря данных). Существуют следующие преобразования в LEGACY
типы:
Native тип | Legacy тип |
---|---|
BOOLEAN |
CHAR(5) |
DECFLOAT |
DOUBLE PRECISION |
INT128 |
BIGINT |
TIME WITH TIME ZONE |
TIME WITHOUT TIME ZONE |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP WITHOUT TIME ZONE |
Использование EXTENDED
в части TO
заставляет Firebird использовать расширенную форму типа в части FROM.В настоящее время он работает только для {TIME | TIMESTAMP} WITH TIME ZONE
— они принудительно приводятсяк EXTENDED {TIME | TIMESTAMP} WITH TIME ZONE
.
Установка NATIVE
означает, что тип будет использоваться так, как если бы для него не было предыдущих правил преобразования.
Правила привязки типов можно установить на уровне соединения через API. Для этого в функцию соединения необходимо передать DPB со строковым значением тэга isc_dpb_set_bind
,в котором предоставлен список опций <type_from> TO <type_to>
, разделенных точкой с запятой.
Кроме того, преобразование типов в legacy типы доступные в предыдущих версиях Firebird можно установить с помощью параметра DataTypeCompatibility
в firebird.conf или databases.conf.Чем позже введено правило (.conf
→ DPB → SQL), тем выше его приоритет.
SET BIND OF
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE; --native
CAST ======================= 123.45
SET BIND OF DECFLOAT TO DOUBLE PRECISION;
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE; --double
CAST ======================= 123.4500000000000
SET BIND OF DECFLOAT(34) TO CHAR;
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE; --всё ещё double
CAST ======================= 123.4500000000000
SELECT CAST('123.45' AS DECFLOAT(34)) FROM RDB$DATABASE; --text
CAST ========================================== 123.45
Если на стороне клиента отсутствует библиотека ICU, то результат следующего запроса будет таким:
SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE;
CURRENT_TIMESTAMP ========================================================= 2020-02-21 16:26:48.0230 GMT*
Для того чтобы получить значение смещения времени относительно GMT, выполните следующее:
SET BIND OF TIME ZONE TO EXTENDED;
SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE;
CURRENT_TIMESTAMP ========================================================= 2020-02-21 19:26:55.6820 +03:00
SET DECFLOAT
Изменение режима округления и поведения при ошибках для типа DECFLOAT
.
SET DECFLOAT { ROUND <round_mode> | TRAPS TO [<trap_opt> [, <trap_opt> ...]] } <round_mode> ::= CEILING | UP | HALF_UP | HALF_EVEN | HALF_DOWN | DOWN | FLOOR | REROUND <trap_opt> ::= DIVISON_BY_ZERO | INEXACT | INVALID_OPERATION | OVERFLOW | UNDERFLOW
SET DECFLOAT ROUND
Оператор SET DECFLOAT ROUND
изменяет режим округления для текущей сессии.Поддерживаются следующие режимы округления совместимые со стандартом IEEE:
Округление сверху. Если все отбрасываемые цифры равны нулю или знак числа отрицателен, то последняя не отбрасываемая цифра остаётся прежней. В противном случае последняя не отбрасываемая цифра инкрементируется на единицу (округляется в большую сторону).
Округление по направлению от нуля (усечение с приращением). Отбрасываемые значения игнорируются.
Округление к ближайшему значению. Используется по умолчанию. Если результат равноудаленный, выполняется округление в большую сторону. Если отбрасываемые значения больше чем или равны половине (0,5) единицы в следующей левой позиции, последняя не отбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). В противном случае отбрасываемые значения игнорируются.
Округление к ближайшему значению. Если результат равноудаленный, выполняется округление так, чтобы последняя цифра была четной. Если отбрасываемые значения больше половины (0,5) единицы в следующей левой позиции, последняя не отбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). Если они меньше половины, результат не корректируется, то есть отбрасываемые знаки игнорируются. В противном случае, когда отбрасываемые значения точно равны половине, последняя не отбрасываемая цифра не меняется, если она является четной и инкрементируется на единицу (округляется в большую сторону) в противном случае (чтобы получить четную цифру). Этот режим округления называется также банковским округлением и дает ощущение справедливого округления.
Округление к ближайшему значению. Если результат равноудаленный, выполняется округление в меньшую сторону. Если отбрасываемые значения больше чем или равны половине (0,5) единицы в следующей левой позиции, последняя не отбрасываемая цифра декрементируется на единицу (округляется в меньшую сторону). В противном случае отбрасываемые значения игнорируются.
Округление по направлению к нулю (усечение). Отбрасываемые значения игнорируются.
Округление снизу. Если все отбрасываемые цифры равны нулю или знак положителен, последняя не отбрасываемая цифра не меняется. В противном случае (знак отрицателен) последняя не отбрасываемая цифра инкрементируется на единицу.
Округление к большему значению, если округляется 0 или 5, в противном случае округление происходит к меньшему значению.
SET DECFLOAT ROUND HALF_DOWN;
Режимы округления | 12.341 | 12.345 | 12.349 | 12.355 | 12.405 | -12.345 |
---|---|---|---|---|---|---|
CEILING |
12.35 |
12.35 |
12.35 |
12.36 |
12.41 |
-12.34 |
UP |
12.35 |
12.35 |
12.35 |
12.36 |
12.41 |
-12.35 |
HALF_UP |
12.34 |
12.35 |
12.35 |
12.36 |
12.41 |
-12.35 |
HALF_EVEN |
12.34 |
12.34 |
12.35 |
12.36 |
12.40 |
-12.34 |
HALF_DOWN |
12.34 |
12.34 |
12.35 |
12.35 |
12.40 |
-12.34 |
DOWN |
12.34 |
12.34 |
12.34 |
12.35 |
12.40 |
-12.34 |
FLOOR |
12.34 |
12.34 |
12.34 |
12.35 |
12.40 |
-12.35 |
REROUND |
12.34 |
12.34 |
12.34 |
12.36 |
12.41 |
-12.34 |
SET DECFLOAT TRAPS
Оператор SET DECFLOAT TRAPS
изменяет поведение ошибок при операциях с типом DECFLOAT
.
По умолчанию исключения генерируются для следующих ситуаций: DIVISION_BY_ZERO,INVALID_OPERATION,OVERFLOW
;это значение по умолчанию соответствует поведению, определенному в стандарте SQL: 2016 для DECFLOAT
.Этот оператор контролирует, приводят ли определенные исключительные условия к ошибке (“ловушка” или “trap”) илиальтернативной обработке (например, потеря значимости возвращает 0
, если не установлена, либо переполнение возвращает бесконечность).Первоначальная конфигурация соединения также может быть указана с помощью тега DPB isc_dpb_decfloat_traps
с желаемыми значениями trap_opt, разделенными запятыми, в виде строкового значения.
Допустимые варианты ловушек (исключительных условий):
Division_by_zero
|
(по умолчанию) |
Inexact
|
— |
Invalid_operation
|
(по умолчанию) |
Overflow
|
(по умолчанию) |
Underflow
|
— |
SET DECFLOAT TRAPS TO Division_by_zero, Inexact, Invalid_operation, Overflow, Underflow;
В Firebird существует два вида тайм-аута:
тайм-аут простоя соединения;
тайм-аут выполнения SQL оператора.
Данная функциональность позволяет автоматически прекратить выполнение SQL оператора, если он выполняется дольше заданного значения тайм-аута.
Данная функция может быть полезна для:
Администраторов баз данных. Они получают инструмент для ограничения времени выполнения тяжёлых запросов, которые потребляют много ресурсов;
Разработчиков приложений. Они могут использовать тайм-ауты SQL операторов при написании и отладке сложных запросов с заранее неизвестным временем выполнения;
Тестеров, которые могут использовать тайм-ауты SQL операторов для обнаружения долго выполняющихся запросов и обеспечения конечного времени выполнения набора тестов.
Эта функциональность работает следующим образом.Когда начинается выполнение оператора (или открывается курсор) Firebird запускает специальный таймер.Выборка записей (fetch) не сбрасывает таймер.Таймер останавливается если выполнение SQL оператора закончено или извлечена (fetch) последняя запись.
По истечению тайм-аута:
Если выполнение SQL оператора активно, оно останавливается в заданный момент.
Если SQL оператор не активен в данный момент (например между выборками (fetch)), то он будет помечен как отменённый, следующая выборка (fetch) прервёт выполнение и будет возвращена ошибка.
Значение тайм-аута может быть установлено:
На уровне базы данных. Значение параметра StatementTimeout
может быть установлено в firebird.conf (или databases.conf) администратором базы данных. Область действия все операторы во всех соединениях. Параметр StatementTimeout
устанавливает тайм-аут в секундах, по истечении которого выполнение SQL операторов будет отменено. Ноль означает, что тайм-аут не установлен. Значение по умолчанию равно 0.
На уровне соединения. Может быть установлен с использованием API (в миллисекундах) или с помощью SQL оператора SET STATEMENT TIMEOUT
. Область действия текущее подключение.
На уровне оператора. Может быть установлен с использованием API (в миллисекундах). Область действия текущий SQL оператор.
Эффективное значение тайм-аута SQL оператора вычисляется каждый раз, когда запускается SQL оператор (открывается курсор), следующим образом:
если тайм-аут не установлен на уровне оператора, будет использовано значение тайм-аута уровня соединения;
если тайм-аут не установлен на уровне соединения, будет использовано значение тайм-аута уровня базы данных;
значение тайм-аута не может быть больше, чем значение установленное на уровне базы данных. Таким образом, значение тайм-аута может перекрываться разработчиком приложения в более низких областях, но оно не может выти за пределы установленные DBA в конфигурации.
Нулевой тайм-аут не обозначает отсутствие тайм-аута, просто в этом случае таймер выполнения оператора не запускается.
Несмотря на то, что тайм-аут выполнения SQL оператора может быть установлен в миллисекундах, абсолютная точность не гарантируется.При высокой нагрузке он может быть менее точным.Единственная гарантия которую может дать Firebird это то, что тайм-аут не сработает раньше указанного момента.Клиентское приложение может ждать больше времени, чем установленное значение тайм-аута если движку Firebird необходимо отменить множество действий связанных с отменой оператора.
Тайм-аут выполнения оператора игнорируется для всех внутренних запросов, которые используется движком Firebird.Кроме того, тайм-аут игнорируется для DDL операторов.
SET STATEMENT TIMEOUT
Установка тайм-аута выполнения SQL операторов на уровне соединения.
DSQL
SET STATEMENT TIMEOUT value [HOUR | MINUTE | SECOND | MILLISECOND]
Параметр | Описание |
---|---|
value |
Значение тайм-аута выполнения SQL операторов в указанных единицах измерения времени.Если единица измерения времени не указано, то по умолчанию значение тайм-аута измеряется в секундах. |
Устанавливает значение тайм-аута выполнения SQL операторов на уровне текущего соединения.Если единица времени не указана, то по умолчанию тайм-аут будет учитываться в секундах.
Note
|
Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно. |
SET STATEMENT TIMEOUT 2 MINUTE
Note
|
Интерактивный инструмент 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]
Параметр | Описание |
---|---|
value |
Значение тайм-аута простоя в указанных единицах измерения времени.Если единица измерения времени не указано, то по умолчанию значение тайм-аута измеряется в минутах. |
Устанавливает значение тайм-аута простоя на уровне текущего соединения.Если единица времени не указана, то по умолчанию тайм-аут будет учитываться в минутах.
Note
|
Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно. |
SET SESSION IDLE TIMEOUT 8 HOUR
Каждое внешнее соединение (созданное оператором EXECUTE STATEMENT … ON EXTERNAL
) при создании связываетсяс пулом соединений (подробнее см. Пул внешних подключений).Данная группа операторов позволяет управлять пулом внешних соединений.При его подготовке они описываются как DDL операторы, но имеют немедленный эффект: то есть они выполняются немедленно и полностью, не дожидаясь фиксации транзакции.Изменения применяются к экземпляру пула в памяти в текущем процессе Firebird.Поэтому изменение в одном классическом процессе не влияет на другие классические процессы.Изменения не являются постоянными и после перезапуска Firebird будет использовать настройки пула из firebird.conf
.
Для выполнения операторов данной группы требуется системная привилегия MODIFY_EXT_CONN_POOL
.Подробнее о системных привилегиях см. [fblangref-security-roles-create].
ALTER EXTERNAL CONNECTIONS POOL SET SIZE
Устанавливает максимальное количество бездействующих соединений.
ALTER EXTERNAL CONNECTIONS POOL SET SIZE size
Параметр | Описание |
---|---|
size |
Размер пула внешних соединений.Допустимые значения от 0 до 1000. |
Оператор ALTER EXTERNAL CONNECTIONS POOL SET SIZE
устанавливает максимальное количество бездействующих соединений в пуле внешних соединений.Допустимые значения от 0 до 1000.Нулевое значение обозначает что пул выключен.Значение по умолчанию определяется в firebird.conf (параметр ExtConnPoolSize).
ALTER EXTERNAL CONNECTIONS POOL SET LIFETIME
Устанавливает время жизни бездействующих соединений.
ALTER EXTERNAL CONNECTIONS POOL SET LIFETIME value <time_part> <time_part> ::= SECOND | MINUTE | HOUR
Параметр | Описание |
---|---|
value |
Время жизни бездействующих соединений. |
Оператор ALTER EXTERNAL CONNECTIONS POOL SET LIFETIME
устанавливает время жизни бездействующих соединений в пуле внешних соединений.Допустимые значения от 1 секунды до 24 часов.Значение по умолчанию определяется в firebird.conf (параметр ExtConnPoolLifeTime в секундах).
ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL
Закрывает все бездействующие соединения.
ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL
Оператор ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL
закрывает все бездействующие соединения в пуле внешних соединений.Все активные соединения будут отсоединены от пула (такие соединения будут немедленно закрыты, когда они не будут использоваться).
ALTER EXTERNAL CONNECTIONS POOL CLEAR OLDEST
Закрывает бездействующие соединения у которых истекло время жизни.
ALTER EXTERNAL CONNECTIONS POOL CLEAR OLDEST
Оператор ALTER EXTERNAL CONNECTIONS POOL CLEAR OLDEST
закрывает бездействующие соединения в пуле у которых истекло время жизни.
SET ROLE
Изменение текущей роли.
DSQL.
SET ROLE rolename
Параметр | Описание |
---|---|
rolename |
Имя устанавливаемой роли. |
Согласно стандарту SQL-2008 оператор SET ROLE
позволяет установить контекстной переменной CURRENT_ROLE
одну из назначенных ролей для пользователя CURRENT_USER или роль, полученную в результате доверительной аутентификации (в этом случае оператор принимает вид SET TRUSTED ROLE
).
SET ROLE manager;
SELECT current_role FROM rdb$database;
ROLE ======================= MANAGER
SET TRUSTED ROLE
Установка доверенной роли.
DSQL
SET TRUSTED ROLE
Оператор SET TRUSTED ROLE
включает доступ доверенной роли, при условии, что CURRENT_USER получен с помощью доверительной аутентификации и роль доступна.
Идея отдельной команды SET TRUSTED ROLE
состоит в том, чтобы при подключении доверенного пользователя не указывать никакой дополнительной информации о роли, SET TRUSTED ROLE
делает доверенную роль (если таковая существует) текущей ролью без дополнительной деятельности, связанной с установкой параметров DBP.
Доверенная роль это не специальный тип роли, ей может быть любая роль, созданная с помощью оператора CREATE ROLE
или предопределённая системная роль RDB$ADMIN.Она становится доверенной ролью для подключения, когда подсистема отображения объектов безопасности (security objects mapping subsystem) находит соответствие между результатом аутентификации, полученным от плагина и локальным или глобальным отображением (mapping) для текущей базы данных.Роль даже может быть той, которая не предоставлена явно этому доверенному пользователю.
Note
|
Доверенная роль не назначается при подключении по умолчанию.Можно изменить это поведение, используя соответствующий плагин аутентификации и операторы |
Примером использования доверенной роли является назначение системной роли RDB$ADMIN
для администраторов Windows, когда используется доверительная аутентификация Windows.
SET TIME ZONE
Изменение часового пояса сеанса.
SET TIME ZONE { <time-zone-string> | LOCAL } <time-zone-string> ::= '<time-zone>' <time-zone> ::= <time-zone-region> | [+/-] <hour-displacement> [: <minute-displacement>]
Немедленно изменяет часовой пояс сеанса (текущего подключения).
Указание LOCAL вернет к начальному часовому поясу сеанса (либо по умолчанию, либо как указано в свойстве соединения isc_dpb_session_time_zone
).
Получить текущий часовой пояс сеанса можно с использованием функции RDB$GET_CONTEXT
с аргументами 'SYSTEM'
для пространства имён и 'SESSION_TIMEZONE'
в качестве имени переменной.
Note
|
Выполнение |
set time zone '-02:00';
select rdb$get_context('SYSTEM', 'SESSION_TIMEZONE') from rdb$database;
-- returns -02:00
set time zone 'America/Sao_Paulo';
select rdb$get_context('SYSTEM', 'SESSION_TIMEZONE') from rdb$database;
-- returns America/Sao_Paulo
set time zone local;
ALTER SESSION RESET
Сброс сессионного окружения.
DSQL
ALTER SESSION RESET
Сбрасывает сеансовое окружение (подключения) к исходному состоянию.Эта функциональность полезна если сеанс используется повторно, вместо того чтобы производить отключение/подключение.
Данный оператор делает следующее:
генерируется ошибка (isc_ses_reset_err
), если в текущем соединении существует какая-либо открытая транзакция, кроме текущей транзакции и подготовленных транзакций 2PC, которые разрешены и игнорируются этой проверкой;
системная переменная RESETTING
устанавливается в TRUE
;
запускаются триггеры базы данных на событие ON DISCONNECT
, если они присутствуют и разрешены для текущего соединения;
текущая пользовательская транзакция откатывается (ROLLBACK
), если она есть. Если в текущей активной транзакции были произведены изменения, то будет выдано предупреждение;
сбрасывает установленные параметры DECFLOAT
(BIND
, TRAP
и ROUND
) в значения по умолчанию;
сбрасывает тайм-ауты сессии и оператора в 0;
удаляет все контекстные переменные из пространства имён USER_SESSION
;
сбрасывает роль в значение переданное в DPB (указанное при подключении) и очищает кеш привилегий (если роль была изменена с помощью оператора SET ROLE);
очищает содержимое всех используемых глобальных таблиц уровня соединения (GLOBAL TEMPORARY TABLE … ON COMMIT PRESERVE ROWS
);
запускаются триггеры базы данных на событие ON CONNECT
, если они присутствуют и разрешены для текущего соединения;
начинает новую транзакцию с теми же свойствами, что и транзакция, которая была отменена (если транзакция присутствовала до сброса);
системная переменная RESETTING
устанавливается в FALSE
.
Ошибка, возникшая в триггере ON DISCONNECT
, прерывает сброс сеанса и оставляет состояние сеанса неизменным.Такие ошибки сообщаются с кодом основной ошибки isc_session_reset_err
и текстом ошибки“Cannot reset user session”.
Ошибки, возникающие после того, как триггеры ON DISCONNECT
выполнены, прерывают выполнение оператора сброса сеанса и само соединение.Такие ошибки сообщались с кодом основной ошибки isc_session_reset_failed
и текстом ошибки“Reset of user session failed. Connection is shut down”.Последующие операции по подключению (кроме отсоединения) завершатся ошибкой isc_att_shutdown
.
SET OPTIMIZE
Изменение стратегии оптимизатора.
DSQL
SET OPTIMIZE <optimize-mode> <optimize-mode> ::= FOR {FIRST | ALL} ROWS | TO DEFAULT
Оператор SET OPTIMIZE
позволяет изменить стратегию оптимизатора на уровне текущей сессии.
Существует две стратегии оптимизации запросов:
FIRST ROWS
- оптимизатор строит план запроса так, чтобы наиболее быстро извлечь только первые строки запроса;
ALL ROWS
- оптимизатор строит план запроса так, чтобы наиболее быстро извлечь все строки запроса.
По умолчанию используется стратегия оптимизации указанная в параметре OptimizeForFirstRows
конфигурационного файлаfirebird.conf
или database.conf
. OptimizeForFirstRows = false
соответствует стратегии ALL ROWS
,OptimizeForFirstRows = true
соответствует стратегии FIRST ROWS
.
Стратегия оптимизации может быть переопределена на уровне SQL оператора с помощью предложения OPTIMIZE FOR
.
SET DEBUG OPTION
Устанавливает опции отладки.
SET DEBUG OPTION option-name = value
Наименование опции | Тип значения | Описание |
---|---|---|
DSQL_KEEP_BLR |
BOOLEAN |
Сохраняет BLR оператора для извлечения с помощью |
Оператор SET DEBUG OPTION
настраивает отладочную информацию для текущего соединения.
Warning
|
Параметры отладки тесно связаны с внутренними компонентами движка, и их использование не рекомендуется, если вы не понимаете, как эти внутренние компоненты могут изменяться в зависимости от версии. |