# Влияние Named Queries на производительность

**URL:** <https://discuss.elastic.co/t/named-queries/184989>\
**Category:** Вопросы на русском языке\
**Created:** [June 10, 2019, 12:49pm UTC](https://discuss.elastic.co/t/named-queries/184989 "2019-06-10T12:49:44Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [June 10, 2019, 12:49pm UTC](https://discuss.elastic.co/t/named-queries/184989/1 "2019-06-10T12:49:44Z")

</div>

Добрый день! Я хочу использовать в своих запросах [Named Queries](https://www.elastic.co/guide/en/elasticsearch/reference/6.4/search-request-named-queries-and-filters.html#search-request-named-queries-and-filters), однако протестировав на небольшом запросе, я заметил почти двукратное снижение производительности. (90-150 мс против 200-300мс с именованными запросам). Сразу скажу, что выборка идет по prefix, возвращается 50 элементов.

Я нашел [тему](https://discuss.elastic.co/t/named-queries-slowing-down-searches/45703) на форуме где столкнулись с таким же поведением, однако ответа на вопрос там не содержится.

Можете объяснить/подтвердить замедление поиска с использованием Named Queries?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [June 10, 2019, 6:15pm UTC](https://discuss.elastic.co/t/named-queries/184989/2 "2019-06-10T18:15:37Z")

</div>

А сколько у вас этих именованных под-запросов в одном запросе? Пример не покажете?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [June 10, 2019, 6:40pm UTC](https://discuss.elastic.co/t/named-queries/184989/3 "2019-06-10T18:40:30Z")

</div>

Вот запрос: [https://gist.github.com/tushinivan/972cde9918f779047010a4b0c5cd6576](https://gist.github.com/tushinivan/972cde9918f779047010a4b0c5cd6576)

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [June 10, 2019, 8:35pm UTC](https://discuss.elastic.co/t/named-queries/184989/4 "2019-06-10T20:35:27Z")

</div>

Какая версия?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [June 11, 2019, 5:14am UTC](https://discuss.elastic.co/t/named-queries/184989/5 "2019-06-11T05:14:13Z")

</div>

6.4.3

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [June 11, 2019, 1:05pm UTC](https://discuss.elastic.co/t/named-queries/184989/6 "2019-06-11T13:05:40Z")

</div>

Хранение запроса, который совпал для каждой записи, конечно, добавляет нагрузку, но увеличение времени исполнения в два раза - это как-то странно. Сколько записей этот запрос находит и как время исполнения меняется если заменить самый первый `should` на `filter`?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [June 12, 2019, 4:58pm UTC](https://discuss.elastic.co/t/named-queries/184989/7 "2019-06-12T16:58:49Z")

</div>

Если заменить первый `should` на `filter`, то запрос выдает 0 результатов за хорошее время.

Но отказаться от корневого `should` невозможно, т.к. таким образом мы даем пользователям возможность объединять сохраненные настройки поиска, однако после поиска понять из какого именно запроса пришли документы сложно, поэтому мы рассматриваем возможность использовать Named Queries.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [June 12, 2019, 5:22pm UTC](https://discuss.elastic.co/t/named-queries/184989/8 "2019-06-12T17:22:24Z")

</div>

Я не заметил что там два подзапроса. А если помесить этот верхний bool в другой bool с filter? Я просто хочу понять, какую нагрузку несет вычисление \_score по сравнению с хранением имен.

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [June 12, 2019, 5:59pm UTC](https://discuss.elastic.co/t/named-queries/184989/9 "2019-06-12T17:59:18Z")

</div>

> [@Igor\_Motov](#):
>
> А если помесить этот верхний bool в другой bool с filter?

По результатам 10 выборок среднее время практически не изменилось. Разница в 11 мс.

Я подумал, что до этого я испытывал только на простом запросе и может быть Named Queries добавляет 150 мс и это не критично, однако, сейчас я провел испытание с тяжелыми запросами и понял, что время исполнения увеличивается пропорционально количеству условий. Вот результаты которые я получил:

С Named Queries  
28706 мс  
22298 мс  
22247 мс  
24341 мс  
24970 мс  
avg: 24512,4 мс

Без Named Queries  
15025 мс  
14019 мс  
14280 мс  
14609 мс  
10606 мс  
avg: 13707,8 мс

Я понял, что для нас это неприемлемо и можно считать вопрос закрытым. Однако, я готов оказать помощь если захотите понять почему так происходит.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [June 13, 2019, 2:57pm UTC](https://discuss.elastic.co/t/named-queries/184989/10 "2019-06-13T14:57:52Z")

</div>

Есть еще несколько вопросов. Это одна нода или этот индекс распередлен? Сколько в нем шард? Как ноды сконфигурированы? Какой диск, RAM и heap для elasticsearch?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [June 14, 2019, 5:53am UTC](https://discuss.elastic.co/t/named-queries/184989/11 "2019-06-14T05:53:38Z")

</div>

Индекс распределен по 4 нодам, конфигурация одинаковая для всех нод:

Процессор|E3-1230v6 3.5-3.9ГГц (4 ядра)  
Оперативная память|64Гб  
Диск 1|2000Гб NVMe  
Heap для elasticsearch: 32Гб

В индексе 6 шард и 1 реплика. Все остальные параметры и конфигурация по умолчанию.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 12, 2019, 6:07am UTC](https://discuss.elastic.co/t/named-queries/184989/12 "2019-07-12T06:07:02Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
