SET_READ_BALANCE
Содержание раздела
Поддерживается в версиях: 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 порядок выбора такой:
- датасорс с весом 10;
- при его занятости — датасорс с весом 0;
- при занятости обоих — датасорс с весом -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)