Обо мне
● 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]
postgres (postmaster)
● контролирует запуск и остановку сервера● создает разделяемую память● при старте порождает служебные процессы● слушает TCP/IP сокет (порт по умолчанию
5432) в ожидании подключений● создает форк для каждого подключения
• бакенды независимые• коннект дорогой (pgpool, pgbouncer)
● следит за падением бэкендов• при необходимости запускает процесс
восстановления
Клиент-серверный протокол
●
● libpq• Библиотека на Си• Основной клиентский интерфейс• Входит в стандартную поставку постгреса
● C++, Perl, Python, Tcl and ECPG● JDBC
64-bit XID
«File names are infinite in length where infinity is set to 255 characters.»
Peter Collinson,«The Unix File System»
Перспективы
● Расширяемость методов доступа• Размер блоков• Структура файлов
● Таблицы в памяти● Приоритеты для avtovacuum
Planner/optimizer
● Построение всех путей выполнения запроса и выбор наилучшего
● Улучшение сбора статистики● Машинное обучение для оценки планов● GEQO● Hints?
Перспективы
● Обобщенный WAL для новых методов доступа● Проверка корректности бэкапа● Инкрементальный бэкап?
Термины
● Tuple (кортеж) — физическое представление строки таблицы● MVCC — система контроля версионности записей в базе● Page (страница) — единица чтения/записи на диск. 8Кб● Relation (отношение) — объект базы данных (таблица,
индекс). Странично-ориентированное хранение● Block (блок) — 2^32 - 1 блоков на relation● Buffer (буфер) — страница, находящаяся в данный момент в
памяти● Shared buffers — разделяемая память, кэш страниц● Node (нода) — узел дерева разбора● Write-ahead log - журнал опережающей записи
На следующем занятии
● как устроено сообщество PostgreSQL● как координируется международная
разработка● какие шаги нужно пройти, чтобы ваш патч
приняли● обзор инструментов, которыми нужно уметь
пользоваться разработчику 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