Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Значение по умолчанию для настройки сессии sql_seq_scan

Параметр: sql_seq_scan_default

Начиная с Tarantool 3.0 значением по умолчанию для настройки сессии sql_seq_scan будет false. Чтобы вернуть прежнее поведение по умолчанию, добавлен новый параметр compat.

Старое и новое поведение

Старое поведение: сканирующие запросы SELECT всегда разрешены.

Новое поведение: сканирующие запросы SELECT разрешены только при корректном использовании ключевого слова SEQSCAN.

Обратите внимание, что параметр совместимости sql_seq_scan_default влияет на сессии только во время инициализации. Это означает, что значение sql_seq_scan_default следует задавать до выполнения box.cfg{} или создания новой сессии. Кроме того, новая сессия, созданная до выполнения box.cfg{}, не будет зависеть от значения параметра compat.

Примеры задания значения параметра перед выполнением box.cfg{}:

tarantool> require('compat').sql_seq_scan_default = 'new'---...tarantool> box.cfg{log_level = 1}---...tarantool> box.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', false]...
tarantool> require('compat').sql_seq_scan_default = 'old'---...tarantool> box.cfg{log_level = 1}---...tarantool> box.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', true]...

Примеры задания значения параметра перед созданием новой сессии после выполнения box.cfg{}:

tarantool> box.cfg{log_level = 1, listen = 3301}---...tarantool> require('compat').sql_seq_scan_default = 'new'---...tarantool> cn = require('net.box').connect(box.cfg.listen)---...tarantool> cn.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', false]...tarantool> require('tarantool').compat.sql_seq_scan_default = 'old'---...tarantool> cn = require('net.box').connect(box.cfg.listen)---...tarantool> cn.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', true]...

Известные проблемы совместимости

На данный момент несовместимых модулей не обнаружено.

Обнаружение проблем в кодовой базе

Ожидается, что большинство запросов SELECT, не использующих индексы, завершатся с ошибкой после того, как для настройки сессии sql_seq_scan будет установлено значение false. Лучший способ избежать этого — переписать запрос для использования индексов. Чтобы определить, использует ли SELECT индексы, можно воспользоваться EXPLAIN QUERY PLAN. Если указано SEARCH TABLE, индекс используется. Если указано SCAN TABLE, индекс не используется.

Для явного разрешения сканирующих запросов можно использовать ключевое слово SEQSCAN. Также можно установить значение true для настройки сессии sql_seq_scan, чтобы разрешить все сканирующие запросы.