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

Базы данных

Трек баз данных: тест с выбором ответа

Суть MCQ на синтез поперёк трека: связать схему, индексы, планы, MVCC, пулинг, миграции и шардинг в одно дерево решений, ведущее продукт от MVP до шардированного кластера.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

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

Цель

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

Викторина

Запрос фильтрует orders по тенанту и дате, ты добавляешь composite-индекс. Оба плана ниже — по одной таблице, различается лишь порядок колонок индекса. Почему планировщик пропускает индекс в плане A? ```sql -- query SELECT * FROM orders WHERE tenant_id = 42 AND created_at >= '2026-01-01'; -- A: CREATE INDEX ON orders (created_at, tenant_id); -> Seq Scan -- B: CREATE INDEX ON orders (tenant_id, created_at); -> Index Scan ```

Викторина

Ночной batch держит одну транзакцию открытой три часа. За это же окно OLTP-таблица под активными UPDATE растёт с 8 ГБ до 40 ГБ на диске, хотя число живых строк почти не меняется. Что связывает долгую транзакцию с bloat?

Викторина

Отчётный запрос был быстрым месяцами, потом внезапно выбрал nested-loop join вместо hash join и вырос с 200 мс до 40 с после всплеска импорта данных. EXPLAIN ANALYZE показывает: планировщик ждал 12 строк из одной ветки, получил 2,1 млн. Корневая причина и первый устойчивый фикс?

Викторина

Ты ставишь приложение за PgBouncer в transaction mode, чтобы пережить storm соединений. Сразу же приложение падает с ошибкой, что prepared statements не существуют, а SET search_path, выполненный при коннекте, больше не держится. Почему?

Викторина

Нужно переименовать горячую колонку `email` в `email_address` на таблице с 500 млн строк без даунтайма, пока старый и новый код приложения работают бок о бок во время rolling-деплоя. Какая последовательность верна?

Викторина

Multi-tenant SaaS упирается в лимит записи на одном Postgres. Команда предлагает hash-шардинг по колонке `country`. Три тенанта в одной стране дают 70% трафика. Что пойдёт не так и какой ключ шардирования лучше?

Итог

Трек — одно дерево решений для растущего продукта: сначала смоделируй схему ради integrity, добавь индекс, чья ведущая колонка совпадает с паттерном доступа, читай план, чтобы ловить ошибки оценки строк до каскада, держи транзакции короткими, чтобы MVCC мог вакуумить, рассчитай размер и режим пула, чтобы пережить storm соединений, разложи каждое ломающее изменение на фазы expand-contract и берись за шардинг только после выбора высококардинального ко-локирующего ключа и исчерпания всех более дешёвых рычагов. Каждый режим отказа сводится к одному вопросу: какой слой — узкое место и какой самый дешёвый рычаг его чинит?

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

Trademarks belong to their respective owners. Editorial reference only.