awesome-everything EN
↑ Обратно к восхождению

Базы данных

Планы выполнения: тест с выбором ответа

Суть Синтез в формате multiple-choice по всему юниту execution plans — чтение EXPLAIN ANALYZE, выбор scan и join, каскад ошибок оценки строк, extended statistics и generic-plan trap.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов, проходящих через весь юнит. Каждый — план, который ты реально читал бы в инциденте: не определение для пересказа, а диагноз, который нужно поставить по выводу, и фикс, который нужно выбрать под нагрузкой.

Цель

Подтверди, что умеешь читать план EXPLAIN ANALYZE, проследить плохую оценку строк вверх до join, который она сломала, и выбрать фикс, бьющий по причине, а не по симптому — синтез, к которому вели семь уроков.

Викторина

Запрос быстр на staging и медленный в production. Та же схема, те же индексы. EXPLAIN ANALYZE прод-прогона показывает: Nested Loop (actual time=4180..4192 rows=50 loops=1) -> Index Scan on orders (cost=0..3800000 rows=50) (actual time=12..3950 rows=520000 loops=1) -> Index Scan on customers_pkey (actual time=0.002..0.002 rows=1 loops=520000) В чём первопричина?

Викторина

Таблица на 1M строк имеет индекс по status. Запрос WHERE status = 'active' попадает в 400 000 строк (40% таблицы). Планировщик выбирает Seq Scan вместо индекса. Это баг, и почему?

Викторина

Предикат фильтрует по WHERE country='US' AND region='CA' AND status='shipped'. Планировщик прогнозирует 500 строк; узел реально выдаёт 50 000. Одноколоночная statistics свежая. Что чинит оценку?

Викторина

Параметризованный запрос быстр месяцами, затем P99 прыгает до 4с, а среднее остаётся ~3мс. pg_stat_statements показывает большой stddev_exec_time. EXPLAIN (GENERIC_PLAN) по подготовленной форме показывает: Index Scan using idx_orders_created on orders Filter: ((workspace_id = $1) AND (status = $2)) Что произошло и каков немедленный фикс?

Викторина

B2B-дашборд деградирует каждое утро понедельника после ночного воскресного batch-импорта 20M строк, затем сам восстанавливается ко вторнику. В чём причина и устойчивый фикс?

Викторина

EXPLAIN (ANALYZE, BUFFERS) на Hash Join показывает Hash Batches: 64 и Sort Method: external merge Disk: 450MB на сортировке под ним. Среднее время высокое, но reads — в основном shared hit. В чём узкое место и точечный фикс?

Итог

Сквозная линия юнита — одна дисциплина чтения: на каждом узле плана сравнивай rows-estimated с actual rows, найди, где открывается разрыв, и проследи его вверх — плохая оценка каскадирует в неверный выбор scan, неверный алгоритм join и неверный метод сортировки над ней. Выбор scan следует за селективностью, выбор join — за оценкой внешней стороны, а устойчивые фиксы бьют по причине: свежая statistics через ANALYZE, extended statistics для коррелированных колонок, force_custom_plan для перекошенных prepared statements и cost-константы под SSD. Форсирование алгоритма или перестройка индекса лечат симптом; починка оценки исправляет весь план.

Продолжить восхождение ↑Планы выполнения: тест на припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.