Сколько строк вернул параллельный скан
Вопрос
Запрос с фильтром по дню. Таблица orders на 1 млн строк, customers на 50 тыс., PostgreSQL 16. Сколько строк в сумме вернул узел Parallel Seq Scan?
Gather (cost=1000.00..16199.67 rows=5000 width=32) (actual time=18.035..56.183 rows=2880 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Parallel Seq Scan on orders (cost=0.00..14699.67 rows=2083 width=32) (actual time=20.416..43.039 rows=960 loops=3)
Filter: (date((created_at AT TIME ZONE 'UTC'::text)) = '2024-03-01'::date)
Rows Removed by Filter: 332373
Planning Time: 0.477 ms
Execution Time: 56.398 ms
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- 960: это число в
actual ... rows - 5000: это оценка у узла
Gather - 332 373: столько строк узел обработал
- 2880:
rowsданы на цикл, циклов 3правильный ответ
Разбор
В EXPLAIN ANALYZE поля actual rows и time показываются в среднем на один цикл (loops). Параллельный скан выполнялся в трёх процессах: 2 запущенных воркера плюс ведущий процесс, который тоже читает данные (parallel_leader_participation включён по умолчанию). Итого 960 × 3 = 2880, и ровно столько же показывает Gather. Значение 5000 это оценка планировщика, а не факт. Rows Removed by Filter: 332373 тоже на цикл: это строки, отброшенные фильтром, а не возвращённые.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.