SET_READ_BALANCE

Содержание раздела
  1. Как работает запрос
  2. Связанные запросы
  3. Синтаксис
  4. Варианты ответа
  5. Примеры
    1. Добавление новой настройки балансировки
    2. Изменение существующей настройки балансировки

Поддерживается в версиях: 7.7.

Запрос добавляет или обновляет настройку балансировки чтения для указанных приоритетов запросов и датасорса.

Если указанного сочетания приоритета и датасорса нет среди существующих настроек, настройка добавляется; иначе — обновляется.

Как работает запрос

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

Если запрос изменил лимит слотов в датасорсе:

  • число занятых слотов остается прежним, пока запросы, начатые до изменения, не завершатся — даже если оно превышает новый лимит. По мере освобождения слотов их число приводится к новому лимиту;
  • лимит слотов и число свободных слотов обновляются в соответствии с новым значением.
  • GET_READ_BALANCE — возвращает текущие настройки балансировки;
  • ERASE_READ_BALANCE — удаляет настройки балансировки;
  • CHECK_READ_SLOTS — возвращает текущее состояние слотов на чтение;
  • RESET_READ_SLOTS — обнуляет счетчики занятых слотов на чтение.

Синтаксис

SET_READ_BALANCE(sql_request_priority, datasource_name, datasource_priority, slots_limit)

Параметры:

sql_request_priority (varchar | char | string)

Приоритет запросов на чтение, для которого добавляется или обновляется настройка. Может быть произвольной строкой, включая зарезервированные слова. Регистр не важен: система приводит значение к верхнему регистру при его сохранении.

datasource_name (varchar | char | string)

Имя датасорса, для которого добавляется или обновляется настройка. Должно соответствовать конфигурации; иначе возвращается ошибка.

datasource_priority (bigint | int64 | long)

Вес датасорса при выборе для запросов с указанным приоритетом: чем больше значение, тем большее предпочтение отдается датасорсу.

Может быть любым целым числом, в том числе 0 или отрицательные значения. Веса для каждого приоритета запроса образуют шкалу: датасорс с наименьшим весом выбирается в последнюю очередь, а датасорсы с более высокими весами получают предпочтение.

Например, при весах -10, 0 и 10 порядок выбора такой:

  1. датасорс с весом 10;
  2. при его занятости — датасорс с весом 0;
  3. при занятости обоих — датасорс с весом -10.

Чтобы оставить вес без изменений, укажите текущее значение (доступно с помощью GET_READ_BALANCE).

Подробнее о выборе датасорса см. в разделе Выбор датасорса для исполнения запроса.

slots_limit (bigint | int64 | long)

Лимит слотов в датасорсе, выделяемых каждой нодой для запросов указанного приоритета. Может быть любым целым числом больше 0.

Чтобы оставить число слотов без изменений, укажите текущее значение (доступно с помощью GET_READ_BALANCE).

Варианты ответа

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Успешный ответ означает, что изменения применены как минимум на ноде, принявшей запрос, и лидере. На остальные ноды кластера изменения распространяются с небольшой задержкой. При временной недоступности лидера до выбора нового запрос возвращает ошибку.

Примеры

Добавление новой настройки балансировки

SET_READ_BALANCE('high', 'adp4', 2, 5)

Изменение существующей настройки балансировки

Изменение веса датасорса, установленного в предыдущем примере:

SET_READ_BALANCE('high', 'adp4', 5, 5)

Изменение веса датасорса и лимита слотов:

SET_READ_BALANCE('high', 'adp4', 10, 10)