Архитектура PostgreSQL
PostgreSQL — это объектно-реляционная СУБД с модульной архитектурой.
Понимание архитектуры PostgreSQL, позволит эффективно настраивать и администрировать PostgreSQL. Рассмотрим подробно архитектуру PostgreSQL.
Модульная архитектура — это подход к проектированию систем, при котором система разделяется на независимые, функционально завершенные компоненты (модули), которые взаимодействуют друг с другом через четко определенные интерфейсы. Каждый модуль выполняет определенную задачу и может быть разработан, протестирован и модернизирован независимо от других модулей.
Модульная архитектура в PostgreSQL
-
Процессор запросов:
-
Разбирает и оптимизирует SQL-запросы.
-
-
Менеджер транзакций:
-
Управляет транзакциями и обеспечивает ACID-свойства.
-
-
Менеджер памяти:
-
Управляет буферами и кэшированием данных.
-
-
Менеджер хранения:
-
Отвечает за физическое хранение данных на диске.
-
-
Модуль WAL (Write-Ahead Logging):
-
Обеспечивает надежность и восстановление данных.
-
-
Модуль репликации:
-
Управляет репликацией данных между серверами.
-
Основные компоненты PostgreSQL:
-
Процессы:
-
Postmaster: Главный процесс, управляющий всеми остальными процессами.
-
Backend processes: Процессы, обслуживающие клиентские подключения.
-
Background processes: Фоновые процессы (например, автоочистка, запись в WAL).
-
-
Структуры данных:
-
Shared Buffers: Общая память для кэширования данных.
-
WAL (Write-Ahead Log): Журнал предзаписи для обеспечения надежности.
-
Tablespaces, Databases, Tables: Логические и физические структуры хранения данных.
-
-
Файлы:
-
Data files: Файлы данных (таблицы, индексы).
-
WAL files: Файлы журнала предзаписи.
-
Configuration files: Файлы конфигурации (
postgresql.conf
,pg_hba.conf
).
-
Изоляция и многоверсионность (MVCC)
-
MVCC (Multi-Version Concurrency Control):
-
Механизм, позволяющий нескольким транзакциям работать с данными одновременно без блокировок.
-
Каждая транзакция видит "снимок" данных на момент своего начала.
-
-
Реализация MVCC в PostgreSQL:
-
Каждая строка (tuple) имеет два дополнительных поля:
-
xmin
: Идентификатор транзакции, создавшей строку. -
xmax
: Идентификатор транзакции, удалившей строку (если есть).
-
-
Версии строк:
-
При изменении данных создается новая версия строки, а старая помечается как устаревшая.
-
Устаревшие строки сохраняются до тех пор, пока они не будут очищены.
-
-
-
Преимущества MVCC:
-
Высокая производительность при параллельных операциях.
-
Отсутствие блокировок при чтении.
-
Очистка (Vacuum)
-
Назначение очистки:
-
Удаление "мертвых" строк (устаревших версий данных).
-
Освобождение места для новых данных.
-
Обновление статистики для планировщика запросов.
-
-
Типы очистки:
-
Обычная очистка (VACUUM):
-
Удаляет мертвые строки, но не возвращает место операционной системе.
-
Не блокирует таблицу для чтения/записи.
-
-
Полная очистка (VACUUM FULL):
-
Возвращает место операционной системе.
-
Требует эксклюзивной блокировки таблицы.
-
-
Автоочистка (Autovacuum):
-
Фоновый процесс, автоматически выполняющий очистку.
-
Настраивается через параметры
autovacuum
вpostgresql.conf
.
-
-
-
Параметры очистки:
-
autovacuum
: Включение/выключение автоочистки. -
vacuum_cost_limit
: Лимит "стоимости" очистки. -
vacuum_cost_delay
: Задержка между операциями очистки.
-
VACUUM создаёт значительную нагрузку на подсистему ввода/вывода, что может отрицательно сказаться на производительности других активных сеансов. Поэтому иногда полезно использовать возможность задержки очистки с учётом её стоимости.
Практическое использование этой команды будет рассмотрено далее в учебнике.
Буферный кэш (Shared Buffers)
-
Назначение:
-
Кэширование данных в оперативной памяти для ускорения доступа.
-
-
Управление:
-
Размер буферного кэша задается параметром
shared_buffers
вpostgresql.conf
. -
Рекомендуемое значение: 25-40% от общей оперативной памяти.
-
-
Принцип работы:
-
Данные считываются с диска в буферный кэш.
-
Последующие операции чтения/записи выполняются в памяти.
-
Измененные данные (грязные страницы) периодически записываются на диск.
-
-
Проблемы:
-
Недостаток памяти может привести к вытеснению страниц из кэша.
-
Избыток памяти может привести к неэффективному использованию ресурсов.
-
Журнал предзаписи (WAL — Write-Ahead Log)
-
Назначение:
-
Обеспечение надежности и восстановления данных после сбоев.
-
Все изменения сначала записываются в WAL, а затем в данные.
-
-
Принцип работы:
-
Каждая транзакция записывает свои изменения в WAL.
-
WAL-файлы сохраняются на диск до подтверждения транзакции.
-
В случае сбоя данные восстанавливаются из WAL.
-
-
Параметры WAL:
-
wal_level
: Уровень журналирования (minimal
,replica
,logical
). -
wal_buffers
: Размер буферов для WAL. -
checkpoint_timeout
: Интервал между контрольными точками.
-
-
Контрольные точки (Checkpoints):
-
Периодически данные из WAL применяются к основным данным.
-
Управляются параметрами
checkpoint_timeout
иcheckpoint_completion_target
.
-
Архитектура PostgreSQL обеспечивает высокую производительность, надежность и масштабируемость.
Понимание архитектуры позволяет эффективно настраивать и администрировать PostgreSQL.