вторник, 22 декабря 2015 г.

Курс «Hacking PostgreSQL» — уже скоро

          Сегодня я рада анонсировать курс “Hacking PostgreSQL” из 16 занятий, на которых мы вместе будем исследовать особенности архитектуры открытой СУБД и вносить изменения на уровне исходного кода. Курс будет проходить в Москве, на площадке компании Postgres Professional. Начало курса запланировано на февраль 2016 года. Лекции начнутся после февральской конференции pgconf.ru и будут проходить один раз в неделю вечером. Видеозаписи и материалы лекций мы будем выкладывать по мере обработки.

          Курс собран из личного опыта разработчиков нашей компании, материалов с конференций, статей и вдумчивого чтения документации и исходников. В первую очередь он адресован начинающим разработчикам ядра PostgreSQL. Но он будет интересен и DBA, которым иногда приходится влезать в код, и просто всем неравнодушным к архитектуре большой системы, желающим узнать “А как это работает на самом деле?”

          Мы специально анонсируем курс заранее, чтобы подготовить лекции с учетом ваших комментариев. А ещё потому, что есть предварительные требования:

  • SQL. Специфических знаний не требуется, но вы должны быть в курсе как со стороны SQL работают индексы, транзакции и так далее. Материалы на выбор: PostgreSQL Tutorial и SQL Tutorial
  • С. Будет много кода. Если вы хотите просто посмотреть, достаточно уметь его читать. А вот для того, чтобы выполнять практические задания, лучше освежить знания. Например, по этому курсу Practical Programming in C
  • Базовые структуры данных и алгоритмы. Можно почитать здесь и посмотреть курс здесь.

          Мы хотим создать открытую базу знаний о внутреннем устройстве СУБД на примере PostgreSQL. Надеемся, что жаркие дискуссии с администраторами выйдут на новый уровень взаимопонимания, а пользователи с разработчиками наконец смогут говорить на одном языке. А ещё при подготовке курса мы перечитываем код, исправляем мелкие недочеты и устаревшие комментарии и находим интересные задачи, которые можно добавить в TODO.

          Нельзя объять необъятное, особенно за 16 занятий. Хотя мы очень старались. В итоге программа курса получилась такой:

  1. Обзор архитектуры
    Первая лекция призвана дать общее представление о подсистемах PostgreSQL и их связи, а также кратко определить термины, которые мы будем использовать в следующих лекциях.

  2. Сообщество PostgreSQL и инструменты разработчика
    Лирическое отступление о том, как устроено сообщество PostgreSQL, как координируется международная разработка, какие шаги нужно пройти, чтобы ваш патч приняли, и некоторые полезные мелочи, которые пригодятся начинающему разработчику ядра. А также обзор инструментов, которыми нужно уметь пользоваться.

  3. Расширения для PostgreSQL
    В третьей лекции пошагово разобрано создание своего расширения (contrib). Это самый простой и естественный способ приобщиться к разработке и добавить в PostgreSQL новую функциональность. Кроме этого, будет рассмотрена внутренняя расширяемость Постгреса на примере добавления нового типа данных.

  4. Обзор исходного кода
    В этой лекции мы проследим путь выполнения различных запросов от получения текста запроса до выдачи результата.

  5. Физическое представление данных
    После этой лекции вы будете знать, как уложены атрибуты в строке, строки на странице, страницы в таблице, а таблицы в базе. А также то, как Postgres справляется с выравниванием данных и хранением больших атрибутов. Это поможет увидеть некоторые ограничения архитектуры и понять (а может и придумать новые) приемы проектирования оптимальной схемы БД.

  6. Разделяемая память и блокировки
    Из этой лекции вы узнаете, как устроен менеджер памяти в PostgreSQL, сколько разных видов блокировок используется, чтобы параллельные транзакции работали правильно, и что на самом деле меняют настройки памяти в postgresql.conf.

  7. Локальная память процессов
    На этой лекции мы продолжим говорить об устройстве памяти в PostgreSQL. Локальная память процессов используется для кэширования данных каталога и планов запросов, для выполнения сортировок, для работы некоторых служебных процессов, а также для размещения временных таблиц.

  8. Базовое устройство планировщика и экзекьютора запросов
    Лекция будет посвящена планировщику и экзекьютору СУБД PostgreSQL. Рассказывать будем на примерах с кодом и поясняющими картинками

  9. Особенности кода
    Для того, чтобы понимать исходный код системы, а тем более развивать его, нужно познакомится с принятыми соглашениями. В этой лекции пойдет речь о типе данных Datum, обработке объектов переменной длины, различных макросах и соглашениях о вызовах функций (calling conventions).

  10. Системный каталог
    В системном каталоге содержатся метаданные обо всех объектах системы. Кроме информации о пользовательских таблицах, функциях и триггерах, в нём также хранятся сведения о типах данных, операторах и методах доступа к ним, и многое другое. В лекции приведен обзор основных таблиц каталога и интерфейс взаимодействия с ними.

  11. Работа с памятью
    Для удобства и эффективности работы с памятью вместо стандартных функций языка С (malloc/free), в PostgreSQL используются их аналоги palloc/pfree. В этой лекции речь пойдет о том, как устроены контексты памяти, как правильно использовать их в коде, и какие ситуации могут привести к неожиданно большому потреблению памяти.

  12. Nodes & Trees
    Информация об SQL запросе в PostgreSQL содержится в структурах типа Node. Они используются в качестве узлов дерева запросов (Query tree), в деревьях разбора (Parse tree) и планировщика (Plan tree). В этой лекции мы рассмотрим основные типы узлов и разберем алгоритмы работы упомянутых деревьев.

  13. Патч ядра PostgreSQL

  14. Отладка. Тестирование функциональности и производительности
    В лекции мы поговорим об инструментах отладки и тестирования, с помощью которых можно исследовать PostgreSQL. А ещё о том, как прекратить сравнивать теплое с мягким и начать правильно тестировать производительность.

  15. Транзакции. MVCC и VACUUM

  16. WAL. И восстановление, и репликация
    WAL, он же Write-Ahead Log, он же журнал опережающей записи. В этой лекции мы постараемся рассказать самое полезное о его формате, использовании и настройках.

  17. Индексы
    Рассказ о том, как устроены разные типы индексов в PostgreSQL, рассуждения о структурах данных, советы по эффективному использованию и поддержанию индексов. А также приглашение к дискуссии с разработчиками о перспективах и новых идеях развития.

  18. Тенденции развития СУБД в целом и PostgreSQL в частности
    Заключительная лекция этого курса, на которой мы обсудим перспективы развития PostgreSQL. Разные виды кластеров, column storage, in-memory структуры, параллельная обработка запросов, хинты, пространственные данные и другие интересные задачи, которые слишком масштабны для этого курса.

          Координировать и читать этот курс буду я, Анастасия Лубенникова, разработчик ядра PostgreSQL. Предложения и пожелания оставляйте в комментариях.

          UPD: Курс будет открытым и бесплатным. Возможны ограничения только по вместимости аудиторий. Поэтому, записывайтесь заранее, чтобы мы могли оценить реальное количество желающих.

Записаться можно здесь: