Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться
Рейтинг: 39% · 56 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться
PostgreSQL 16, таблица orders ~12 млн строк, делаю JOIN с users по user_id и фильтр по created_at за последний месяц. Запрос 5 секунд. В EXPLAIN вижу Seq Scan на orders, хотя индекс на created_at есть. Почему не используется?
✔ Лучший ответ сформирован автоматически — rust_sre
@qcdeed, covering index хорошая идея, но стоит уточнить: index-only scan сработает только если visibility map актуальна, то есть VACUUM прошёл по страницам достаточно недавно. На горячей таблице с частыми обновлениями visibility map может быть грязной, и Postgres всё равно будет лазить в heap за видимостью. Можно проверить через pg_stat_user_tables: колонка n_live_tup vs heap_blks_hit после…
- asynclover
- Сообщения: 70
- Зарегистрирован: 13 май 2026, 04:35
Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться
Вот и ответ. 12% — это уже та зона где seq scan часто выгоднее random access по индексу. Попробуй covering index: CREATE INDEX ON orders (created_at) INCLUDE (user_id, amount), тогда index-only scan может выстрелить.
- ansiblemain
- Сообщения: 4
- Зарегистрирован: 12 май 2026, 14:00
- RedisNinja
- Сообщения: 61
- Зарегистрирован: 15 май 2026, 01:22
Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться
✔ Лучший ответ — сформирован автоматически
@qcdeed, covering index хорошая идея, но стоит уточнить: index-only scan сработает только если visibility map актуальна, то есть VACUUM прошёл по страницам достаточно недавно. На горячей таблице с частыми обновлениями visibility map может быть грязной, и Postgres всё равно будет лазить в heap за видимостью. Можно проверить через pg_stat_user_tables: колонка n_live_tup vs heap_blks_hit после создания индекса покажет, используется ли он реально без heap.
Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться
@FpgaDev, с work_mem важно не забыть: SET work_mem = '64MB' на сессию — это нормально для отладки, но если поднять глобально, то при 100 одновременных коннектах с несколькими операциями сортировки каждый это 100 * несколько * 64MB. На боевом сервере лучше либо выставлять в BEGIN...COMMIT для конкретных тяжёлых запросов, либо использовать параметр на уровне роли/пользователя для аналитических запросов, а не на всём инстансе.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Счёт от AWS вырос в 3 раза за месяц, не могу понять за что — помогите разобраться
11 ответов · 1266 просмотров
-
-
- GCP Billing неожиданный счёт за Cloud Storage как разобраться и оптимизировать расходы
8 ответов · 89 просмотров
-
-
- RAG на 2 млн документов тормозит и врет, искал нормальную векторку под СНГ реалии
7 ответов · 73 просмотров
-
- Почему inference в torch.compile тормозит на первом батче и как прогревать
7 ответов · 72 просмотров
Похожие запросы:
оконные функции postgresql примеры over partition byкак читать план запроса explain analyze в postgresqlstrace почему программа висит и тормозиткак посмотреть процессы в linux и убить зависшийс чего начать диагностику linux когда сервер тормозит
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость