В настоящее время мы сталкиваемся с множеством исключений, как это:Поле, как Doc_Values уронить использование памяти
ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException: Data too large, data for field [field1] would be larger than limit of [24108466176/22.4gb]]
После некоторого исследования вышеупомянутого исключения, field1
, кажется, занимает много fielddata cache size
вместе с вызовом других полевыми ДАВАЙТЕ это field2
Результат GET /_stats/fielddata?fields=field1,field2
:
"total": {
"fielddata": {
"memory_size_in_bytes": 260456614595,
"evictions": 1226307,
"fields": {
"field1": {
"memory_size_in_bytes": 76629429704
},
"field2": {
"memory_size_in_bytes": 97600838429
}
}
}
}
Примечание: оба поля not_analyzed
. Поле1 сильно используется в поисковых запросах, а поле2 - не столько.
Таким образом, в разделе документации документации эти поля могут быть сохранены как doc values
для уменьшения использования кучи.
Является ли это хорошим подходом к решению проблем памяти, таких как исключение выше?
В документации также говорится, что, сохраняя поля как значения doc, индексы станут больше, есть ли способ рассчитать это увеличение?
Использование значений doc рекомендуется в таких ситуациях, потому что все давление, которое вы положили на кучу, будет перемещено на диск. Недостатком, однако, является небольшое снижение производительности. И поскольку вы перемещаете этот раздел кучи из памяти на диск, я бы предположил, что увеличение будет аналогично уменьшению использования кучи. –