From fe1db7ae1ec7e4c615e48d31cd2ca057e45f20ec Mon Sep 17 00:00:00 2001 From: Dmitry Medvedev Date: Sun, 12 Jul 2026 23:55:27 +0500 Subject: [PATCH] added taskss greenplum optimization explain --- .../4.3.greenplun_optimization_explain.sql | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 dmedvedev/4.3.greenplun_optimization_explain.sql diff --git a/dmedvedev/4.3.greenplun_optimization_explain.sql b/dmedvedev/4.3.greenplun_optimization_explain.sql new file mode 100644 index 0000000..a81c501 --- /dev/null +++ b/dmedvedev/4.3.greenplun_optimization_explain.sql @@ -0,0 +1,53 @@ +## Задача 1: + +EXPLAIN ANALYZE +SELECT user_id, COUNT(*) +FROM orders +GROUP BY user_id; + +📌 `orders` распределена по `order_id`. + +Что происходит: + +``` +Segment: + Seq Scan on orders + ▼ + Redistribute Motion (по user_id) + ▼ + HashAggregate (GROUP BY user_id) +``` + +💣 **Проблема:** Motion перед агрегированием — значит данные идут по сети между сегментами. + +### Задание: + +1. Что будет, если `orders DISTRIBUTED BY user_id`? + В таком случае таблица orders будет распределена по user_id между сегментами, соответственно счет будет внутри сегментов и не будет motion между сегментами. +2. Как меняется `EXPLAIN ANALYZE` + Не будет Redistribute Motion (по user_id) + +## Задача 2: + +SELECT user_id, COUNT(*) +FROM orders +GROUP BY user_id; + +📌 `orders` содержит 10 млн заказов, и 90% из них у `user_id = 1`. + +Что происходит: + +``` +Segment 1: user_id = 1 → 9 млн строк +Segment 2: остальные user_id → 1 млн строк +Segment 3–N: почти пусто + +❗ Segment 1 перегружен → весь запрос тормозит +``` + +### Задание: + +1. Как это называется? + Это называется "перекос" +2. Как избежать? + Сделать составной ключ по двум аргументам, либо разбить сегменты рандомно. \ No newline at end of file