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

34
www.postgrespro.ru Обзор архитектуры PostgreSQL Hacking PostgreSQL 25.02.2016

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

www.postgrespro.ru

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

Hacking PostgreSQL25.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й лекции● [email protected]

Расширяемость 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 PostgreSQL25.02.2016

Источники

● Heikki Linnakangas. PostgreSQL System Architecture. 2014. https://youtu.be/UdlQ7bZUZ9w + http://2014.pgday.ru/files/presentations/PGDay14.Russia.PostgreSQL.architecture.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-finalaug222013

● Владимир Бородин. Базы данных: PostgreSQL. 2014. https://events.yandex.ru/lib/talks/2324/

● Фёдор Сигаев. Архитектура , устройство и особенности PostgreSQL. 2015.● Для любителей истории - статьи М.Стоунбрейкера.

http://www.postgresql.org/docs/9.5/static/biblio.html