Архитектура памяти PostgreSQL
Архитектуру памяти в PostgreSQL можно разделить на две большие категории:
- Локальная память – выделяется каждым backend-процессом для собственного использования;
- Разделяемая память – используется всеми процессами сервера PostgreSQL.
Краткое описание данных категорий Вы найдете в последующих разделах.
Локальная память
У каждого серверного процесса есть своя локальная память. В ней находится кэш каталога (часто используемая информация о базе данных), планы запросов, рабочее пространство для выполнения запросов и другое. Локальная память подразделяется на несколько подобластей, размеры которых могут быть как фиксированными, так и переменными.
В таблице 2.2 приведен список основных подобластей. Подробное описание каждой подобласти Вы найдете в последующих главах.
|
Таблица 2.2: Локальная память |
||
|
Подобласть |
Описание |
Ссылка |
|
work_mem |
параметр конфигурации, который определяет максимальный объем памяти, который может быть использован для операций сортировки и хеширования в рамках одного запроса, не включая операции с дисковым хранением |
|
|
maintenance_work_mem |
параметр конфигурации, который управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM , CREATE INDEX и ALTER TABLE |
|
|
temp_buffers |
Параметр, который задаёт максимальное число временных буферов для каждого сеанса. Его можно изменить в отдельном сеансе, но только до первого обращения к временным таблицам; после этого изменить его значение для текущего сеанса не удастся |
|
Разделяемая память
При запуске сервер PostgreSQL выделяет область общей памяти. Эта область также делится на несколько подобластей фиксированного размера, которые кратко писаны в таблице 2.3. Более подробную информацию Вы найдете в последующих главах.
|
Таблица 2.3: Разделяемая память |
||
|
Подобласть |
Описание |
Ссылка |
|
shared buffer pool |
PostgreSQL загружает страницы таблиц и индексов из постоянного хранилища в эту область и работает с ними напрямую. |
|
|
WAL buffer |
Для того, чтобы гарантировать, что данные не были потеряны в результате сбоев сервера, PostgreSQL поддерживает механизм WAL. Данные WAL (также называемые записями XLOG) представляют собой журнал транзакций в PostgreSQL. Буфер WAL - это область буферизации данных WAL перед записью в постоянное хранилище. |
|
|
commit log |
Представляет из себя структуру данных, которая располагается на жестком диске и запоминает (логирует) все операции записи для повышения живучести данных (data durability) при различных сбоях (например потеря питания). |
|
Помимо shared buffer pool, WAL buffer и commit log в PostgreSQL есть еще несколько областей:
- области для различных механизмов управления доступом (например, облегченные блокировки, общие и эксклюзивные блокировки и т. д.);
- области для различных фоновых процессов, таких как checkpointer и autovacuum;
- области для обработки транзакций, такие как точки сохранения и двухфазная фиксация.
и другие.




