Size: a a a

pgsql – PostgreSQL

2021 February 18

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Я убрал max_conn чтобы влезать в 16gb
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
У меня все равно пулер перед базой
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
У меня не больше 30 коннектов
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Там как раз 50 вышло на 200 метров ворк мема
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitrii Korotovskii
Там как раз 50 вышло на 200 метров ворк мема
Это не расчёт, это значение "с потолка", Вы это понимаете (work_mem так не считается)? ;)

Кстати, я заметил, что перепутал поля в запросе — там по Offers.is_active сортируется, а не по shops.is_active, извините.
Т.е. индекс этот не нужен, а вот на offers что-то такое можно попробовать... и возможно, что тут лучше попробовать переписать запрос (хотя бы для эксперимента, даст это что-то или нет — если даст, то уже Вам виднее, получится ли это в ORM).
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Технически переписать то переписал бы, только были бы идеи как 😃
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Например если убрать Images чтобы потом переделать на select стратегию по IN () отдельным запросом - выишрыш 300мс
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitrii Korotovskii
Технически переписать то переписал бы, только были бы идеи как 😃
Ну и, казалось бы — начать с упрощённого запроса:
1. Currencies и images (если они N:1, я не смотрел) — это всё "декорации", т.е. ни количества строк, ни сортировки они не меняют, по идее — убрать.
2. Из shops и countries ничего не выбирается — их место в EXISTS.
3. Возможно (в зависимости от того, как она  связана с остальными) сделать что-то с application_offers.
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Но опять же, целая секунда и 100мс остаются
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
2. В смысле в WHERE ?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitrii Korotovskii
2. В смысле в WHERE ?
Да.
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
👍
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Т.е., начать с чего-то такого:
SELECT *
 FROM offers
 LEFT JOIN application_offers AS ApplicationOffers
   ON ApplicationOffers.application_id = 2
  AND offers.id = ApplicationOffers.offer_id
WHERE EXISTS (
      SELECT 1
        FROM shops
       INNER JOIN countries
          ON countries.id = 2 AND countries.id = shops.country_id
       WHERE shops.id = offers.shop_id
      )
ORDER BY Offers.is_active DESC NULLS LAST,
         ApplicationOffers.is_active DESC NULLS LAST,
         Offers.expires ASC NULLS LAST
LIMIT 20 OFFSET 0;
если ничего не перепутал.
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Ага, у меня щас примерно такой же получился.
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Дает 1.4 секунды
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
Самое интересное что у этого план становится хуже, появляются temp
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitrii Korotovskii
Ага, у меня щас примерно такой же получился.
А что там со связкой offers и application_offers (т.е., может, там есть FK, или почему-либо ещё можно поменять JOIN на INNER, например)?
источник

DK

Dmitrii Korotovskii in pgsql – PostgreSQL
fk есть
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitrii Korotovskii
Самое интересное что у этого план становится хуже, появляются temp
А это, как раз, сейчас неважно. Сначала надо найти, от чего оттолкнуться.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
А какой / как они связаны?
источник