Вы можете изолировать запросы, которые потребляют большой объём памяти или занимают длительное время. Таким образом вы обеспечиваете доступность сервиса для остальных запросов. Если использование heap‑памяти узла слишком высоко, будет запущена программа управления прерываниями для завершения большого запроса в соответствии с настроенными политиками. Вы также можете настроить глобальную длительность тайм‑аута запросов. Длинные запросы будут перехвачены нативным API отмены Elasticsearch.
Изоляция запросов большого объёма может эффективно решить следующие проблемы и повысить производительность поиска в кластерах:
Только кластеры Elasticsearch 7.6.2 и Elasticsearch 7.10.2 поддерживают изоляцию запросов большого объёма.
Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этом разделе в качестве примера используется Kibana для описания процедур эксплуатации.
Левая часть консоли — это поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
Изоляция крупного запроса включена по умолчанию, в то время как глобальный таймаут запроса отключен по умолчанию. Если включить их, конфигурация вступит в силу немедленно.
Выполните следующие команды, чтобы включить изоляцию крупного запроса и глобальный таймаут запроса:
PUT _cluster/settings{"persistent": {"search.isolator.enabled": true,"search.isolator.time.enabled": true}}
У каждой из двух функций есть независимый переключатель. Таблица 1 описаны их параметры.
Переключатель | Параметр | Описание |
|---|---|---|
search.isolator.enabled | search.isolator.memory.task.limit search.isolator.time.management | Пороговые значения для идентификации задачи запросов одного шарда как крупного запроса. |
search.isolator.memory.pool.limit search.isolator.memory.heap.limit search.isolator.count.limit | Пороговые значения использования ресурсов для изоляции. Если использование ресурсов задачей запроса превышает один из этих порогов, задача будет приостановлена. NOTE: search.isolator.memory.heap.limit Определяет предел использования памяти кучи, потребляемой записью, запросом и другими операциями узла. Если этот предел превышен, крупные задачи запросов в пуле изоляции будут приостановлены. | |
search.isolator.strategy search.isolator.strategy.ratio | Политика выбора задач запросов для приостановки в пуле изоляции. | |
search.isolator.time.enabled | search.isolator.time.limit | Глобальный тайм‑аут для задач запросов. |
PUT _cluster/settings{"persistent": {"search.isolator.memory.task.limit": "50MB","search.isolator.time.management": "10s"}}
Параметр | Тип | Описание |
|---|---|---|
search.isolator.memory.task.limit | String | Порог памяти, запрашиваемой задачей запроса для выполнения агрегации или других операций. Если запрашиваемая память превышает порог, задача будет изолирована и наблюдаться.
|
search.isolator.time.management | String | Порог продолжительности запроса (начинается, когда ресурсы кластера используются для запроса). Если продолжительность запроса превышает порог, запрос будет изолирован и наблюдаться.
|
PUT _cluster/settings{"persistent": {"search.isolator.memory.pool.limit": "50%","search.isolator.memory.heap.limit": "90%","search.isolator.count.limit": 1000}}
Параметр | Тип | Описание |
|---|---|---|
search.isolator.memory.pool.limit | String | Порог процента памяти кучи текущего узла. Если общий объём памяти, запрашиваемый большими задачами запросов в пуле изоляции, превышает порог, будет запущена программа управления прерываниями для отмены одной из задач.
|
search.isolator.memory.heap.limit | Строка | Порог heap‑памяти текущего узла. Если heap‑память узла превышает порог, будет запущена программа управления прерываниями для отмены крупной задачи запроса в пуле изоляции.
|
search.isolator.count.limit | Целое | Порог количества крупных задач запросов в пуле изоляции текущего узла. Если количество наблюдаемых задач запросов превышает порог, будет запущена программа управления прерываниями для прекращения приёма новых крупных запросов. Новые запросы на крупные запросы будут отменены напрямую.
|
В дополнение к search.isolator.memory.pool.limit и search.isolator.count.limit параметры, вы можете настроить search.isolator.memory.task.limit и search.isolator.time.management для контроля количества задач запросов, попадающих в изоляционный пул.
PUT _cluster/settings{"persistent": {"search.isolator.strategy": "fair","search.isolator.strategy.ratio": "0.5%"}}
Параметр | Тип | Описание |
|---|---|---|
search.isolator.strategy | String | Политика выбора больших запросов при срабатывании программы управления прерываниями. Выбранные запросы будут прерваны. ПРИМЕЧАНИЕ: Большой пул изоляции запросов проверяется каждую секунду, пока память кучи не находится в безопасном диапазоне. Значения: справедливый, mem-first, или time-first
Значение по умолчанию: справедливо |
search.isolator.strategy.ratio | String | Порог справедливо политика. Этот параметр вступает в силу только если search.isolator.strategy установлен в справедливо. Если разница между использованием памяти больших задач запросов не превышает порог, запрос, который занимает самое длительное время, должен быть прерван. Если разница между использованием памяти больших задач запросов превышает порог, запрос, использующий наибольший объём памяти, прерывается.
|
Выполните следующую команду, чтобы установить глобальный тайм‑аут задач запросов:
PUT _cluster/settings{"persistent": {"search.isolator.time.limit": "120s"}}
Параметр | Тип | Описание |
|---|---|---|
search.isolator.time.limit | String | Глобальная продолжительность тайм‑аута запросов. Любая задача запроса, превышающая эту продолжительность, будет отменена.
|
Выполните следующую команду, чтобы установить максимальное количество записей журнала, сохраняемых для отменённых запросов:
PUT _cluster/settings{"persistent": {"search.isolator.log.count": "100"}}
Параметр | Тип данных | Описание |
|---|---|---|
search.isolator.log.count | Целое | Максимальное количество записей отменённых запросов, которое может быть сохранено в памяти.
NOTE: Вы можете использовать следующие API для запроса отменённых запросов:
В приведённых выше командах, nodeId указывает ID узла. |