В PostgreSQL есть три основных группы процессов. Postmaster — процесс, который первым запускается при старте сервера, инициализирует общую память, запускает другие фоновые процессы, принимает входящие соединения и передает их на серверный процесс Postgres. Фоновые (служебные) процессы выполняют служебные функции: запись в журнал сообщений об ошибках, сброс данных из буфера WAL на диск, автоочистку таблиц от удалённых записей, сбор статистики о работе БД и другие.
Чтобы уменьшить нагрузку на Postmaster при большом числе соединений, необходимо использовать пулер соединения, например PgBouncer. В Яндексе используется собственный пулер соединения Odyssey, который разработали в 2019 году. Odyssey решил несколько проблем PgBouncer: однопоточность, сложность в диагностике, лимит max_client_pool_conn
. Кластеры PostgreSQL, созданные в Yandex Cloud, автоматически получают Odyssey и их производительность не падает с увеличением числа соединений.
Большую часть общей памяти (Shared Memory), которую использует в работе PostgreSQL, занимает буферный кеш (shared buffers), необходимый для ускорения работы с диском сервера. Второй по значимости раздел общей памяти — буфер WAL (журнала упреждающей записи), который временно хранит все изменения данных в базе. Оставшуюся часть памяти занимает различная служебная информация: данные о блокировках, кеш каталога серверного процесса, планы запросов, рабочие данные фоновых процессов и другие.
В основе хранения PostgreSQL — кластер из нескольких хостов баз данных. Данные на диске хранятся в виде табличных пространств, которые указывают на каталог в файловой системе и могут одновременно использоваться несколькими базами данных. Таблицы и индексы хранятся в одном или нескольких файлах внутри каталога табличного пространства.
PostgreSQL редко выбирают для сайтов или приложений с небольшим числом пользователей — на ней разворачивают высоконагруженные сложные корпоративные системы, платформы сбора и анализа данных, финансовые сервисы и другие критичные системы.
PostgreSQL решает бизнес-задачи в тех сферах, где простои в работе приводят к финансовым и репутационным потерям: в ритейле, e-commerce, в энергетике и промышленности, в финансах и страховании, в образовательных учреждениях и IT-компаниях. С помощью PostgreSQL можно:
- строить сложные платформы данных для анализа показателей рынка, учёта ресурсов и финансовой оценки;
- хранить данные с датчиков и устройств;
- быстро запускать на рынок продукты и приложения;
- обрабатывать и анализировать большие массивы данных;
- создавать и запускать корпоративные системы управления.