У меня есть кластер Elastic Search 5.2 с 16 узлами (13 узлов данных / 3 мастера / 24 ГБ ОЗУ / 12 ГБ кучи). Я тестирую запрос на производительность и делаю 50 вызовов поискового запроса в секунду в эластичном кластере. Мой запрос выглядит следующим образом -
{
"query": {
"bool": {
"must": [
{
"term": {
"cust_id": "AC-90-464690064500"
}
},
{
"range": {
"yy_mo_no": {
"gt": 201701,
"lte": 201710
}
}
}
]
}
}
}
Мое отображение индекса выглядит следующим образом:
cust_id Keyword
smry_amt Long
yy_mo_no Integer // doc_values enabled
mkt_id Keyword
. . .
. . .
currency_cd Keyword // Total 10 field with 8 Keyword type
Индекс содержит 200 миллионов записей, и для каждого cust_id может быть 100 записей. Индекс имеет 2 реплики. Размер записи менее 100 байт.
Когда я запускаю тест производительности в течение 10 минут, ответ на запрос и производительность кажутся очень медленными. После более подробного изучения вкладки мониторинга Kibana, оказалось, что происходит много действий по сбору мусора (пожалуйста, см. Изображение ниже) -
У меня в голове затуманивается несколько вопросов. Я провел некоторое исследование по запросам диапазона, но не нашел подробностей о том, что может вызвать активность сборщика мусора в сценариях, подобных моему. Я также исследую использование памяти и активность сборщика мусора, но в большей части документации по Elastic говорится, что сборщик мусора молодого поколения является нормальным при индексировании, тогда как поисковая активность в основном использует кеш файловой системы, поддерживаемый ОС. Вот почему на приведенной выше диаграмме куча мало используется, так как поиск использовал кеш файловой системы.
So -
- Что могло вызвать здесь сборку мусора?
- Диаграмма показывает, что куча по-прежнему доступна для эластичного поиска, а используемая куча по-прежнему очень меньше по сравнению с доступной. Тогда что запускает сборщик мусора?
- Является ли тип запроса причиной создания какой-либо внутренней структуры данных, которая удаляется, вызывая сборку мусора?
- Пик загрузки ЦП может быть вызван активностью GC.
- Есть ли другой эффективный способ выполнения запроса Range в Elastic Search до версий 5.5?
- Профилирование запроса показывает, что Elastic выполняет TermQuery и BooleanQuery, причем последний из них стоит больше всего.
Есть идеи, что здесь происходит?
Заранее спасибо,
- SGSI.