OpenSearch: Высокое время индексации

OpenSearch logo OpenSearch

Во время индексирования OpenSearch с высоким временем индексирования накапливает документы в памяти, а затем записывает их на диск, чтобы создать новый сегмент lucene. Создание большого количества сегментов неэффективно, поэтому существует отдельный процесс слияния, который объединяет небольшие сегменты, созданные во время индексирования, в более крупные сегменты.

Однако этот процесс отнимает много ресурсов, особенно дисковых ресурсов ввода-вывода. Когда OpenSearch обнаруживает, что процесс слияния не поспевает за скоростью индексирования, он начинает дросселировать индексирование, о чем свидетельствует высокое значение времени индексирования (index throttle time).

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

Повторное выполнение запросов с ограничением скорости также может создавать дополнительную нагрузку на процессоры, расположенные выше по потоку, поскольку им приходится держать данные в очереди (если это возможно) и использовать ресурсы для повторного выполнения запросов.

Как решить проблему

Когда происходит дросселирование индекса, вы должны попытаться оптимизировать индексирование, используя некоторые из следующих действий:

Уменьшите частоту обновления индекса:

Отключите репликацию индексов:

Используйте массовое индексирование (_bulk) вместо индивидуального

Модернизируйте вращающиеся диски до SSD или NVMe.

Оптимизируйте сопоставления, чтобы сократить количество ненужных полей

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

Примечания и полезные советы

Если вы видите, что дросселирование индекса происходит только на некоторых узлах, а не на всех узлах данных, это может быть связано с недостаточным количеством первичных шардов в индексе, чтобы распределить активность индексирования по всем узлам. Это может произойти, если у вас, например, один "занятый" индекс с одним шардом, что приведет к тому, что вся активность индексирования будет сосредоточена на узле, на котором находится шард для этого индекса. В этом случае решением будет увеличение количества шардов в настройках индекса и создание или перенос индекса.

Дополнительные рекомендации по улучшению индексации можно найти в полном списке рекомендаций здесь.

Avatar for Gnostis
Gnostis
Добавить комментарий