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 существуют четыре класса переменных:
- Переменная сервера на сессию:
set var_name = value - Глобальная переменная сервера:
set global var_name = value - Глобальная пользовательская переменная:
set global @var_name = (value) - Глобальная распределённая переменная:
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 соединения. -
* `WAIT_TIMEOUT/net_read_timeout = <значение>` устанавливает таймаут соединения, либо для сессии, либо глобально. Глобальный может быть установлен только на VIP-соединении.threads_ex(диагностическая): Заставляет Manticore вести себя так, как будто он запущен на CPU с указанным профилем. Краткий пример:set threads_ex='4/2+6/3'означает 'у вас есть 4 свободных CPU ядра, при планировании нескольких запросов их нужно группировать по 2. Кроме того, у вас есть 6 свободных CPU ядер для псевдо-шардинга, части нужно группировать по 3'. Эта опция диагностическая, так как очень полезна, например, чтобы увидеть, как ваш запрос выполнялся бы на конфигурации, которой у вас нет локально. Например, на 128-ядерном CPU. Или, наоборот, чтобы быстро ограничить демон до однопоточного режима, чтобы найти узкое место или исследовать сбой.Известные глобальные серверные переменные:
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 включен.