Установка переменных онлайн

SET

SET [GLOBAL] server_variable_name = value
SET [INDEX table_name] GLOBAL @user_variable_name = (int_val1 [, int_val2, ...])
SET NAMES value [COLLATE value]
SET @@dummy_variable = ignored_value

Оператор SET в Manticore Search позволяет изменять значения переменных. Имена переменных не чувствительны к регистру, и никакие изменения значений переменных не сохранятся после перезапуска сервера.

Manticore Search поддерживает оператор SET NAMES и синтаксис SET @@variable_name для совместимости с внешними MySQL клиентскими библиотеками, коннекторами и фреймворками, которые могут требовать выполнения этих операторов при подключении. Однако эти операторы не влияют на сам Manticore Search.

В Manticore Search существуют четыре класса переменных:

  1. Переменная сервера на сессию: set var_name = value
  2. Глобальная переменная сервера: set global var_name = value
  3. Глобальная пользовательская переменная: set global @var_name = (value)
  4. Глобальная распределённая переменная: set index dist_table_name global @var_name = (value)

Глобальные пользовательские переменные разделяются между параллельными сессиями. Единственный поддерживаемый тип значения — список BIGINT, и эти переменные можно использовать с оператором IN() для фильтрации. Основное применение этой возможности — загрузка больших списков значений в searchd один раз с последующим многократным использованием, что снижает сетевые расходы. Глобальные пользовательские переменные можно передавать всем агентам распределённой таблицы или устанавливать локально в случае локальной таблицы, определённой в распределённой таблице. Пример:

// in session 1
mysql> SET GLOBAL @myfilter=(2,3,5,7,11,13);
Query OK, 0 rows affected (0.00 sec)
// later in session 2
mysql> SELECT * FROM test1 WHERE group_id IN @myfilter;
+------+--------+----------+------------+-----------------+------+
| id   | weight | group_id | date_added | title           | tag  |
+------+--------+----------+------------+-----------------+------+
|    3 |      1 |        2 | 1299338153 | another doc     | 15   |
|    4 |      1 |        2 | 1299338153 | doc number four | 7,40 |
+------+--------+----------+------------+-----------------+------+
2 rows in set (0.02 sec)

Manticore Search поддерживает переменные сервера на сессию и глобальные переменные сервера, которые влияют на определённые настройки сервера в соответствующих областях видимости. Ниже приведён список известных переменных сервера на сессию и глобальных переменных сервера:

Известные переменные сервера на сессию:

  • AUTOCOMMIT = {0 | 1} определяет, должны ли операции изменения данных неявно заключаться в BEGIN и COMMIT.

  • COLLATION_CONNECTION = collation_name выбирает колляцию для ORDER BY или GROUP BY по строковым значениям в последующих запросах. Список известных названий колляций см. в разделе Collations.

  • MAX_THREADS_PER_QUERY = <POSITIVE_INT_VALUE> переопределяет max_threads_per_query во время выполнения. Переменная на сессию влияет только на запросы, выполняемые в той же сессии (соединении), т.е. до отключения. Значение 0 означает "без ограничений". Если установлены обе переменные — и на сессию, и глобальная, приоритет выше у переменной на сессию.

  • net_write_timeout = <value>: Настраивает сетевой таймаут для операций записи, то есть отправки данных. Глобальное значение можно изменять только при наличии VIP-привилегий.

  • optimize_by_id = {0 | 1}: Внутренний флаг, используемый в некоторых debug командах.

  • PROFILING = {0 | 1} включает профилирование запросов в текущей сессии. По умолчанию 0. См. также show profile.

  • ro = {1 | 0} переключает сессию в режим только для чтения или обратно. В выводе show variables переменная показывается под именем session_read_only.

  • throttling_period = <INT_VALUE>: Интервал (в миллисекундах), в течение которого текущий выполняющийся запрос будет переназначен. Значение 0 отключает ограничение, что значит, запрос займет ядра CPU до завершения. Если параллельные запросы поступают в это же время из других соединений, они будут отправлены на свободные ядра или приостановлены до освобождения ядра. Установка отрицательного значения (-1) сбрасывает ограничение до стандартного скомпилированного значения (100 мс), что означает переназначение запроса каждые 100 мс, позволяющее выполнять параллельные запросы. Глобальное значение (устанавливаемое через set global) может задаваться только через VIP соединение.

  • thread_stack = <value>: Меняет значение по умолчанию на лету, ограничивая размер стека, выделенного одной задаче. При этом 'thread' здесь означает не поток ОС, а поток пользователя, известный также как корутина. Это полезно, например, если вы загружаете percolate таблицу с неожиданно высокими требованиями. В таких случаях 'call pq' завершится ошибкой о недостаточном размере стека. Обычно нужно остановить демон, увеличить значение в конфиге, а затем перезапустить. Однако можно попробовать новое значение без перезапуска, установив его этой переменной. Глобальное значение также можно изменить онлайн с set global thread_stack, но это возможно только из VIP соединения.

  • threads_ex (диагностическая): Заставляет Manticore вести себя так, как будто он запущен на CPU с указанным профилем. Краткий пример: set threads_ex='4/2+6/3' означает 'у вас есть 4 свободных CPU ядра, при планировании нескольких запросов их нужно группировать по 2. Кроме того, у вас есть 6 свободных CPU ядер для псевдо-шардинга, части нужно группировать по 3'. Эта опция диагностическая, так как очень полезна, например, чтобы увидеть, как ваш запрос выполнялся бы на конфигурации, которой у вас нет локально. Например, на 128-ядерном CPU. Или, наоборот, чтобы быстро ограничить демон до однопоточного режима, чтобы найти узкое место или исследовать сбой.

    MORE
    * `WAIT_TIMEOUT/net_read_timeout = <значение>` устанавливает таймаут соединения, либо для сессии, либо глобально. Глобальный может быть установлен только на VIP-соединении.

    Известные глобальные серверные переменные:

    • ACCURATE_AGGREGATION: Устанавливает значение по умолчанию для опции accurate_aggregation будущих запросов.
    • AUTO_OPTIMIZE = {1|0} Включает/выключает auto_optimize.
    • cluster_user = name Устанавливает имя пользователя, используемое с mysqldump / mariadb-dump для включения режима репликации.
    • COREDUMP= {1|0} Включает/выключает сохранение core-файла или минидампа сервера при сбое. Подробнее здесь.
    • CPUSTATS= {1|0} Включает/выключает отслеживание времени CPU.
    • DISTINCT_PRECISION_THRESHOLD: Устанавливает значение по умолчанию для опции distinct_precision_threshold будущих запросов.
    • ES_COMPAT = {on/off/dashboards} При установке в on (по умолчанию) поддерживаются запросы записи, аналогичные Elasticsearch; off отключает поддержку; dashboards включает поддержку и также разрешает запросы из Kibana (функциональность экспериментальная).
    • EXPANSION_MERGE_THRESHOLD_DOCS: Изменяет значение настройки конфига expansion_merge_threshold_docs на лету.
    • EXPANSION_MERGE_THRESHOLD_HITS: Изменяет значение настройки конфига expansion_merge_threshold_hits на лету.
    • GROUPING_IN_UTC = {0 | 1} При установке в 1 вызывает расчет функций группировки по времени (day(), month(), year(), yearmonth(), yearmonthday()) в UTC. Подробнее о параметре grouping_in_utc.
    • IOSTATS = {0 | 1} Включает или выключает отчеты об операциях ввода-вывода (кроме атрибутов) в журнале запросов.
    • LOG_DEBUG_FILTER = <string value> Фильтрует избыточные сообщения журнала. Если установлено значение, тогда все логи с уровнем > INFO (например, DEBUG, DEBUGV и т.д.) будут сравниваться со строкой, и выводиться только в случае, если начинаются с данного значения.
    • LOG_LEVEL = {info | debug | replication | debugv | debugvv} Изменяет текущий уровень подробности журнала.
    • MAINTENANCE = {0 | 1} При установке в 1 переводит сервер в режим обслуживания. В этом режиме запросы могут выполнять только клиенты с VIP-соединениями. Все новые не-VIP соединения отклоняются. Существующие соединения сохраняются.
    • MAX_THREADS_PER_QUERY = <POSITIVE_INT_VALUE> Переопределяет max_threads_per_query во время выполнения. Если задано глобально, меняет поведение для всех сессий. Значение 0 означает "без ограничений". Если установлены обе переменные — на сессию и глобальная, приоритет у переменной на сессию.
    • NET_WAIT = {-1 | 0 | POSITIVE_INT_VALUE} Изменяет значение настройки net_wait_tm searchd.
    • OPTIMIZE_CUTOFF = <value>: Изменяет значение настройки конфига optimize_cutoff на лету.
    • PSEUDO_SHARDING = {1|0} Включает/выключает поиск с помощью псевдо-шардинга.
    • QCACHE_MAX_BYTES = <value> Изменяет лимит использования ОЗУ для query_cache на заданное значение.
    • QCACHE_THRESH_MSEC = <value> Изменяет минимальный порог времени выполнения кэша запросов query_cache на заданное значение.
    • QCACHE_TTL_SEC = <value> Изменяет время жизни (TTL) для закэшированного результата в query_cache на заданное значение.
    • QUERY_LOG_FORMAT = {plain | sphinxql} Изменяет текущий формат журнала.
    • QUERY_LOG_MIN_MSEC = <value> Изменяет значение настройки query_log_min_msec searchd. В этом случае значение ожидается строго в миллисекундах без обработки суффиксов времени, как в конфиге.

      Внимание: это очень специфичная и "жёсткая" переменная; отфильтрованные сообщения просто удаляются и не записываются в журнал. Лучше фильтруйте журнал с помощью чего-то вроде 'grep', тогда у вас всегда будет резервная копия полного оригинального журнала.

    • RESET_NETWORK_TIMEOUT_ON_PACKET = {1|0} Изменяет параметр reset_network_timeout_on_packet. Изменять этот параметр могут только клиенты с VIP-соединениями.
    • SECONDARY_INDEXES = {1|0} Включает/выключает вторичные индексы для поисковых запросов.
    • TIMEZONE = <value> Указывает временную зону, используемую функциями, связанными с датой/временем. Подробнее о параметре timezone.

    Примеры:

    mysql> SET autocommit=0;
    Query OK, 0 rows affected (0.00 sec)
    mysql> SET GLOBAL query_log_format=sphinxql;
    Query OK, 0 rows affected (0.00 sec)
    mysql> SET GLOBAL @banned=(1,2,3);
    Query OK, 0 rows affected (0.01 sec)
    mysql> SET INDEX users GLOBAL @banned=(1,2,3);
    Query OK, 0 rows affected (0.01 sec)

    Чтобы сделать пользовательские переменные постоянными, убедитесь, что sphinxql_state включен.

Last modified: August 28, 2025