PostgreSQL - это система управления реляционными базами данных клиент-серверного типа с многопроцессорной архитектурой, работающая на одном хосте.
Набор из нескольких процессов, совместно управляющих одним кластером базы данных, обычно называется «сервером PostgreSQL», и он содержит следующие типы процессов:
В следующих подразделах подробно описаны первые три типа процессов.
Пример архитектуры процесса в PostgreSQL.
Как уже было описано выше, серверный процесс postgres является родительским для всего сервера PostgreSQL. В более ранних версиях он назывался «почтмейстер».
При запуске утилиты pg_ctl с параметром start запускается процесс сервера postgres. Затем он выделяет в памяти общую область памяти, запускает различные фоновые процессы, запускает процессы, связанные с репликацией, и фоновые рабочие процессы, если это необходимо, и ожидает запросов на подключение от клиентов. Каждый раз, когда клиент получает запрос на соединение, он запускает внутренний процесс. (А затем запущенный внутренний процесс обрабатывает все запросы, отправленные подключенным клиентом.)
Внутренний процесс, который также называется postgres, запускается серверным процессом postgres и обрабатывает все запросы, отправленные одним подключенным клиентом. Он связывается с клиентом с помощью одного TCP-соединения и завершается, когда клиент отключается.
Поскольку разрешено работать только с одной базой данных, вы должны явно указать базу данных, которую хотите использовать при подключении к серверу PostgreSQL.
Таблица ниже показывает список фоновых процессов. В отличие от сервера postgres и внутреннего процесса, невозможно просто объяснить каждую из функций, потому что эти функции зависят от индивидуальных особенностей и внутренних компонентов PostgreSQL.
| процесс | описание | справка |
|---|---|---|
| background writer | В этом процессе грязные страницы из общего буферного пула регулярно постепенно записываются в постоянное хранилище (например, жесткий диск, твердотельный накопитель). (В версии 9.1 или более ранней он также отвечал за процесс контрольной точки.) | Section 8.6 |
| checkpointer | В этом процессе в версии 9.2 или новее выполняется процесс контрольной точки. | Section 8.6, Section 9.7 |
| autovacuum launcher | Для процесса вакуумирования периодически вызываются рабочие процессы автовакуума. (Точнее, он запрашивает создание рабочих процессов автоочистки на сервере postgres.) | Section 6.5 |
| WAL writer | Этот процесс периодически записывает и сбрасывает данные WAL из буфера WAL в постоянное хранилище. | Section 9.9 |
| statistics collector | В этом процессе собирается статистическая информация, например, для pg_stat_activity, для pg_stat_database и т. Д. | |
| logging collector (logger) | Этот процесс записывает сообщения об ошибках в файлы журнала. | |
| archiver | В этом процессе выполняется архивирование журнала. | Section 9.10 |
postgres> pstree -p 9687 -+= 00001 root /sbin/launchd \-+- 09687 postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data |--= 09688 postgres postgres: logger process |--= 09690 postgres postgres: checkpointer process |--= 09691 postgres postgres: writer process |--= 09692 postgres postgres: wal writer process |--= 09693 postgres postgres: autovacuum launcher process |--= 09694 postgres postgres: archiver process |--= 09695 postgres postgres: stats collector process |--= 09697 postgres postgres: postgres sampledb 192.168.1.100(54924) idle \--= 09717 postgres postgres: postgres sampledb 192.168.1.100(54964) idle in transaction
Архитектуру памяти в PostgreSQL можно разделить на две большие категории:
В следующих подразделах они кратко описаны.
Каждый внутренний процесс выделяет область локальной памяти для обработки запросов; каждая область разделена на несколько подобластей, размеры которых могут быть фиксированными или переменными. Таблица показывает список основных подобластей.
| sub-area | описание | справка |
|---|---|---|
| work_mem | Executor использует эту область для сортировки кортежей по операциям ORDER BY и DISTINCT, а также для соединения таблиц с помощью операций слияния-соединения и хэш-соединения. | Chapter 3 |
| maintenance_work_mem | Некоторые виды операций обслуживания (например, VACUUM, REINDEX) используют эту область. | Section 6.1 |
| temp_buffers | Executor использует эту область для хранения временных таблиц. |
Общая область памяти выделяется сервером PostgreSQL при запуске. Эта область также разделена на несколько подобластей фиксированного размера. Таблица 2.3 показывает список основных подобластей. Подробности будут описаны в следующих главах.
| подобласть | описание | справка |
|---|---|---|
| shared buffer pool | PostgreSQL загружает страницы в таблицы и индексы из постоянного хранилища сюда и управляет ими напрямую. | Chapter 8 |
| WAL buffer | Чтобы гарантировать, что никакие данные не были потеряны из-за сбоев сервера, PostgreSQL поддерживает механизм WAL. Данные WAL (также называемые записями XLOG) представляют собой журнал транзакций в PostgreSQL; а буфер WAL - это область буферизации данных WAL перед записью в постоянное хранилище. | Chapter 9 |
| commit log | Журнал фиксации (CLOG) сохраняет состояния всех транзакций (например, in_progress, подтверждено, прервано) для механизма управления параллелизмом (CC). | Section 5.4 |
В дополнение к ним PostgreSQL выделяет несколько областей, как показано ниже:
и другие.