Собесов

Архитектура СУБД: компоненты Storage Engine и Query Processor

SQLАрхитектура СУБДСредняяMiddle

Условие

Из каких компонентов состоит storage engine СУБД, и как обрабатывается SQL-запрос на верхнем уровне?

Решение

Слои архитектуры СУБД

Client → Transport Layer → Query Processor → Storage Engine → Disk/Memory

Компоненты Storage Engine

Менеджер Что делает
Buffer Manager Кэширует страницы данных в RAM (shared_buffers в PG)
Memory Pool Manager Управляет рабочей памятью для запросов (work_mem)
Lock Manager Координирует блокировки строк/таблиц для параллельного доступа
Transaction Manager Управляет ACID-свойствами, BEGIN/COMMIT/ROLLBACK
Recovery Manager Восстанавливает БД после сбоев через WAL/redo-log

Компоненты Query Processor

  • Parser — разбирает SQL в AST.
  • Optimizer — выбирает план выполнения (cost-based / rule-based).
  • Plan Generator — превращает логический план в физические операторы.
  • Executor — выполняет план, обращаясь к Storage Engine.

Обобщённая схема обработки запроса

SQL → Парсинг (Parsing)
    → Оптимизация (Optimization)
    → План (Plan)
    → Выполнение (Execution)
    → Результат (Return)

Transport Layer

Поддерживает четыре типа коммуникации:

  • Cluster communication — между нодами кластера.
  • Node communication — между процессами на одной ноде.
  • Peer communication — между равными участниками.
  • Client communication — клиентские соединения (psql, JDBC).

Recovery Manager и WAL

Каждое изменение пишется сначала в WAL (Write-Ahead Log), потом в data-страницы. После сбоя:

  1. Recovery Manager читает WAL.
  2. Восстанавливает закоммиченные транзакции (REDO).
  3. Откатывает незавершённые (UNDO).

Без этого после crash'а БД могла бы потерять данные.

Lock Manager и параллелизм

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;  -- блокировка строки
COMMIT;                                                     -- освобождение

В Storage Engine блокировки бывают:

  • Row-level — блокируется строка.
  • Page-level — страница (8KB в PG).
  • Table-level — вся таблица.

PostgreSQL использует MVCC + блокировки на пишущие операции. SELECT не блокирует UPDATE (читает старую версию).

Подводные камни

  1. «Optimizer всегда оптимален» — нет. Может выбрать неудачный план из-за устаревшей статистики (ANALYZE).
  2. Buffer cache != OS page cache — в PG это два уровня кеша; SQL Server и Oracle используют только свой.
  3. Recovery после crash — может занять минуты на больших БД, если давно не было checkpoint.

Эталонный ответ

Storage Engine содержит: Buffer Manager, Memory Pool Manager, Lock Manager, Transaction Manager, Recovery Manager. Query Processor отвечает за парсинг, оптимизацию и выполнение. Обработка: Парсинг → Оптимизация → План → Выполнение → Возврат.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти