Условие
Из каких компонентов состоит 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-страницы. После сбоя:
- Recovery Manager читает WAL.
- Восстанавливает закоммиченные транзакции (REDO).
- Откатывает незавершённые (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 (читает старую версию).
Подводные камни
- «Optimizer всегда оптимален» — нет. Может выбрать неудачный план из-за устаревшей статистики (
ANALYZE). - Buffer cache != OS page cache — в PG это два уровня кеша; SQL Server и Oracle используют только свой.
- Recovery после crash — может занять минуты на больших БД, если давно не было checkpoint.
Эталонный ответ
Storage Engine содержит: Buffer Manager, Memory Pool Manager, Lock Manager, Transaction Manager, Recovery Manager. Query Processor отвечает за парсинг, оптимизацию и выполнение. Обработка: Парсинг → Оптимизация → План → Выполнение → Возврат.