www.postgrespro.ru
Обзор архитектуры
PostgreSQL
Hacking PostgreSQL
25.02.2016
Обо мне
● Index-only scan for GiST
● Microvacuum for GiST
● Write-optimized indexes
for PostgreSQL
● B-tree INCLUDING clause
● B-tree. Compression of
duplicates
Обо мне
● Index-only scan for GiST
● Microvacuum for GiST
● Write-optimized indexes
for PostgreSQL
● B-tree INCLUDING clause
● B-tree. Compression of
duplicates
● 2 years in PostgreSQL
development
Цели курса
● Обучение сотрудников
● Обмен опытом среди разработчиков
● Создание обзора кодовой базы PostgreSQL
● Дополнение документации для разработчиков
● Дополнение списка TODO
● Создание книги о внутреннем устройстве
PostgreSQL
Организационные вопросы
● Занятия 1 раз в неделю
● http://postgres-edu.blogspot.ru/
● Практика после 2й лекции
● hacking@postgrespro.ru
Расширяемость PostgreSQL
Клиент-сервер
postgres (postmaster)
● контролирует запуск и остановку сервера
● создает разделяемую память
● при старте порождает служебные процессы
● слушает TCP/IP сокет (порт по умолчанию
5432) в ожидании подключений
● создает форк для каждого подключения
• бакенды независимые
• коннект дорогой (pgpool, pgbouncer)
● следит за падением бэкендов
• при необходимости запускает процесс
восстановления
Клиент-серверный протокол
●
● libpq
• Библиотека на Си
• Основной клиентский интерфейс
• Входит в стандартную поставку постгреса
● C++, Perl, Python, Tcl and ECPG
● JDBC
Клиент-сервер
Системный каталог
TODO
● DROP OPERATOR не учитывает зависимость
oprnegate.
Подсистемы СУБД
1. Транзакционное хранилище
2. Обработка запросов
3. Обеспечение сохранности данных
Tuple
MVCC
VACUUM
64-bit XID
«File names are infinite in length where
infinity is set to 255 characters.»
Peter Collinson,
«The Unix File System»
Страничное хранение
Файловое хранение
Методы доступа
Shared memory
Перспективы
● Расширяемость методов доступа
• Размер блоков
• Структура файлов
● Таблицы в памяти
● Приоритеты для avtovacuum
Выполнение запроса
Parser
Выполнение запроса
Planner/optimizer
● Построение всех путей выполнения запроса и
выбор наилучшего
● Улучшение сбора статистики
● Машинное обучение для оценки планов
● GEQO
● Hints?
Plan tree
SELECT DISTINCT a1, b1 FROM a, b  
WHERE a2=b2 AND a3=43;
Executor
● Параллельное выполнение
● Возможность отображать прогресс выполнения
● Hooks
WAL
● Журнал опережающей записи
● pg_xlog
● checkpoint
● PITR (Point In Time Recovery)
● Репликация
Перспективы
● Обобщенный WAL для новых методов доступа
● Проверка корректности бэкапа
● Инкрементальный бэкап?
Термины
● Tuple (кортеж) — физическое представление строки таблицы
● MVCC — система контроля версионности записей в базе
● Page (страница) — единица чтения/записи на диск. 8Кб
● Relation (отношение) — объект базы данных (таблица,
индекс). Странично-ориентированное хранение
● Block (блок) — 2^32 - 1 блоков на relation
● Buffer (буфер) — страница, находящаяся в данный момент в
памяти
● Shared buffers — разделяемая память, кэш страниц
● Node (нода) — узел дерева разбора
● Write-ahead log - журнал опережающей записи
На следующем занятии
● как устроено сообщество PostgreSQL
● как координируется международная
разработка
● какие шаги нужно пройти, чтобы ваш патч
приняли
● обзор инструментов, которыми нужно уметь
пользоваться разработчику PostgreSQL
www.postgrespro.ru
Спасибо за внимание!
Вопросы?
Hacking PostgreSQL
25.02.2016
Источники
● Heikki Linnakangas. PostgreSQL System Architecture. 2014.
https://youtu.be/UdlQ7bZUZ9w +
http://2014.pgday.ru/files/presentations/PGDay14.Russia.PostgreSQL.architec
ture.Heikki.Linnakangas.pdf
● Tom Lane. A tour of PostgreSQL Internals. 2000.
http://www.postgresql.org/files/developer/tour.pdf
● Backend Flowchart. http://www.postgresql.org/developer/backend/
● DOCS. Overview of PostgreSQL Internals. 9.5
http://www.postgresql.org/docs/9.5/static/overview.html
● Документация. Обзор внутреннего устройства PostgreSQL. 9.4.
http://postgrespro.ru/doc/overview.html
● Dave Thomas. Overview of Postgres Utility Processes. 2013.
http://www.slideshare.net/EnterpriseDB/overviewutilityprocesses-finalaug2220
13
● Владимир Бородин. Базы данных: PostgreSQL. 2014.
https://events.yandex.ru/lib/talks/2324/
● Фёдор Сигаев. Архитектура , устройство и особенности PostgreSQL. 2015.
● Для любителей истории - статьи М.Стоунбрейкера.
http://www.postgresql.org/docs/9.5/static/biblio.html

Hacking PostgreSQL. Обзор архитектуры.