Содержание

Архитектура процессов и памяти

Архитектура процесса

PostgreSQL - это система управления реляционными базами данных клиент-серверного типа с многопроцессорной архитектурой, работающая на одном хосте.

Набор из нескольких процессов, совместно управляющих одним кластером базы данных, обычно называется «сервером PostgreSQL», и он содержит следующие типы процессов:

В следующих подразделах подробно описаны первые три типа процессов.

Пример архитектуры процесса в PostgreSQL.

Postgres Server Process

Как уже было описано выше, серверный процесс postgres является родительским для всего сервера PostgreSQL. В более ранних версиях он назывался «почтмейстер».

При запуске утилиты pg_ctl с параметром start запускается процесс сервера postgres. Затем он выделяет в памяти общую область памяти, запускает различные фоновые процессы, запускает процессы, связанные с репликацией, и фоновые рабочие процессы, если это необходимо, и ожидает запросов на подключение от клиентов. Каждый раз, когда клиент получает запрос на соединение, он запускает внутренний процесс. (А затем запущенный внутренний процесс обрабатывает все запросы, отправленные подключенным клиентом.)

Backend Processes

Внутренний процесс, который также называется postgres, запускается серверным процессом postgres и обрабатывает все запросы, отправленные одним подключенным клиентом. Он связывается с клиентом с помощью одного TCP-соединения и завершается, когда клиент отключается.

Поскольку разрешено работать только с одной базой данных, вы должны явно указать базу данных, которую хотите использовать при подключении к серверу PostgreSQL.

Background Processes

Таблица ниже показывает список фоновых процессов. В отличие от сервера 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
Здесь показаны фактические процессы сервера PostgreSQL. В следующем примере запущены один серверный процесс postgres (pid 9687), два внутренних процесса (pid 9697 и 9717) и несколько фоновых процессов, перечисленных в таблице.
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_memExecutor использует эту область для сортировки кортежей по операциям ORDER BY и DISTINCT, а также для соединения таблиц с помощью операций слияния-соединения и хэш-соединения.Chapter 3
maintenance_work_memНекоторые виды операций обслуживания (например, VACUUM, REINDEX) используют эту область.Section 6.1
temp_buffersExecutor использует эту область для хранения временных таблиц.

Общая область памяти

Общая область памяти выделяется сервером PostgreSQL при запуске. Эта область также разделена на несколько подобластей фиксированного размера. Таблица 2.3 показывает список основных подобластей. Подробности будут описаны в следующих главах.

подобластьописаниесправка
shared buffer poolPostgreSQL загружает страницы в таблицы и индексы из постоянного хранилища сюда и управляет ими напрямую.Chapter 8
WAL bufferЧтобы гарантировать, что никакие данные не были потеряны из-за сбоев сервера, PostgreSQL поддерживает механизм WAL. Данные WAL (также называемые записями XLOG) представляют собой журнал транзакций в PostgreSQL; а буфер WAL - это область буферизации данных WAL перед записью в постоянное хранилище.Chapter 9
commit logЖурнал фиксации (CLOG) сохраняет состояния всех транзакций (например, in_progress, подтверждено, прервано) для механизма управления параллелизмом (CC).Section 5.4

В дополнение к ним PostgreSQL выделяет несколько областей, как показано ниже:

и другие.