Архитектура PostgreSQL

PostgreSQL — это объектно-реляционная СУБД с модульной архитектурой.

Понимание архитектуры PostgreSQL, позволит эффективно настраивать и администрировать PostgreSQL. Рассмотрим подробно архитектуру PostgreSQL.

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

Модульная архитектура в PostgreSQL
  1. Процессор запросов:

    • Разбирает и оптимизирует SQL-запросы.

  2. Менеджер транзакций:

    • Управляет транзакциями и обеспечивает ACID-свойства.

  3. Менеджер памяти:

    • Управляет буферами и кэшированием данных.

  4. Менеджер хранения:

    • Отвечает за физическое хранение данных на диске.

  5. Модуль WAL (Write-Ahead Logging):

    • Обеспечивает надежность и восстановление данных.

  6. Модуль репликации:

    • Управляет репликацией данных между серверами.


Основные компоненты 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.


Комментарии

Добавить комментарий

Чтобы оставить комменатрий необходимо Авторизоваться