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

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

Jan 23, 2017

Download

Data & Analytics

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Hacking PostgreSQL. Обзор архитектуры.

www.postgrespro.ru

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

Hacking PostgreSQL25.02.2016

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

Обо мне

● Index-only scan for GiST● Microvacuum for GiST● Write-optimized indexes

for PostgreSQL● B-tree INCLUDING clause● B-tree. Compression of

duplicates

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

Обо мне

● 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

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

Цели курса

● Обучение сотрудников● Обмен опытом среди разработчиков● Создание обзора кодовой базы PostgreSQL● Дополнение документации для разработчиков● Дополнение списка TODO● Создание книги о внутреннем устройстве

PostgreSQL

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

Организационные вопросы

● Занятия 1 раз в неделю● http://postgres-edu.blogspot.ru/● Практика после 2й лекции● [email protected]

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

Расширяемость PostgreSQL

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

Клиент-сервер

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

postgres (postmaster)

● контролирует запуск и остановку сервера● создает разделяемую память● при старте порождает служебные процессы● слушает TCP/IP сокет (порт по умолчанию

5432) в ожидании подключений● создает форк для каждого подключения

• бакенды независимые• коннект дорогой (pgpool, pgbouncer)

● следит за падением бэкендов• при необходимости запускает процесс

восстановления

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

Клиент-серверный протокол

● libpq• Библиотека на Си• Основной клиентский интерфейс• Входит в стандартную поставку постгреса

● C++, Perl, Python, Tcl and ECPG● JDBC

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

Клиент-сервер

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

Системный каталог

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

TODO

● DROP OPERATOR не учитывает зависимость oprnegate.

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

Подсистемы СУБД

1. Транзакционное хранилище2. Обработка запросов3. Обеспечение сохранности данных

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

Tuple

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

MVCC

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

VACUUM

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

64-bit XID

«File names are infinite in length where infinity is set to 255 characters.»

Peter Collinson,«The Unix File System»

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

Страничное хранение

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

Файловое хранение

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

Методы доступа

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

Shared memory

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

Перспективы

● Расширяемость методов доступа• Размер блоков• Структура файлов

● Таблицы в памяти● Приоритеты для avtovacuum

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

Выполнение запроса

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

Parser

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

Выполнение запроса

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

Planner/optimizer

● Построение всех путей выполнения запроса и выбор наилучшего

● Улучшение сбора статистики● Машинное обучение для оценки планов● GEQO● Hints?

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

Plan tree

SELECT DISTINCT a1, b1 FROM a, b  WHERE a2=b2 AND a3=43;

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

Executor

● Параллельное выполнение● Возможность отображать прогресс выполнения● Hooks

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

WAL

● Журнал опережающей записи● pg_xlog● checkpoint● PITR (Point In Time Recovery)● Репликация

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

Перспективы

● Обобщенный WAL для новых методов доступа● Проверка корректности бэкапа● Инкрементальный бэкап?

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

Термины

● Tuple (кортеж) — физическое представление строки таблицы● MVCC — система контроля версионности записей в базе● Page (страница) — единица чтения/записи на диск. 8Кб● Relation (отношение) — объект базы данных (таблица,

индекс). Странично-ориентированное хранение● Block (блок) — 2^32 - 1 блоков на relation● Buffer (буфер) — страница, находящаяся в данный момент в

памяти● Shared buffers — разделяемая память, кэш страниц● Node (нода) — узел дерева разбора● Write-ahead log - журнал опережающей записи

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

На следующем занятии

● как устроено сообщество PostgreSQL● как координируется международная

разработка● какие шаги нужно пройти, чтобы ваш патч

приняли● обзор инструментов, которыми нужно уметь

пользоваться разработчику PostgreSQL

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

www.postgrespro.ru

Спасибо за внимание!Вопросы?

Hacking PostgreSQL25.02.2016

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

Источники

● 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