PG BootCamp Russia
У нас есть скромная добрая традиция – розыгрыш книги «Высоконагруженные приложения. Программирование, масштабирование, поддержка» за авторством Мартина Клеппмана (в простонародии – «кабанчик») с автографами спикеров PG BootCamp Russia 2026 Moscow. Для участия…
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🎉1
До розыгрыша «Кабанчика» осталось 3…2…1…
Друзья! Состоялся розыгрыш книги «Высоконагруженные приложения. Программирование, масштабирование, поддержка» за авторством Мартина Клеппмана (в простонародии – «кабанчик») с автографами спикеров PG BootCamp Russia 2026 Moscow.
Победителем стал Vitaly (@Vtitaly)!
Поздравляем. Организаторы свяжутся с вами для уточнения деталей доставки.
Друзья! Состоялся розыгрыш книги «Высоконагруженные приложения. Программирование, масштабирование, поддержка» за авторством Мартина Клеппмана (в простонародии – «кабанчик») с автографами спикеров PG BootCamp Russia 2026 Moscow.
Победителем стал Vitaly (@Vtitaly)!
Поздравляем. Организаторы свяжутся с вами для уточнения деталей доставки.
🔥25🎉20👍9😢2
PG BootCamp Russia 2026 Moscow: как это было
19 марта в Москве прошла пятая, юбилейная конференция PG BootCamp Russia. 563 участника офлайн и более 1300 онлайн — сообщество растет и укрепляется. О том, как это было – читайте на Хабре в репортаже одного из непосредственных участников события..
P.S. Записи всех докладов, а также фотографии с мероприятия появятся в ближайшие недели.
Когда выложим - обязательно сообщим, оставайтесь на связи!
Читать репортаж на Хабре
19 марта в Москве прошла пятая, юбилейная конференция PG BootCamp Russia. 563 участника офлайн и более 1300 онлайн — сообщество растет и укрепляется. О том, как это было – читайте на Хабре в репортаже одного из непосредственных участников события..
P.S. Записи всех докладов, а также фотографии с мероприятия появятся в ближайшие недели.
Когда выложим - обязательно сообщим, оставайтесь на связи!
Читать репортаж на Хабре
Хабр
По следам конференции PG BootСamp Russia 2026, прошедшей 19 марта
Прошла пятая ежегодная конференция PG BootСamp Russia. В этот раз она проводилась в Москве 19 марта 2026 года. 563 оффлайн участника и порядка 1300 онлайн. Первая конференция прошла в 2023 году и...
👍16🔥6❤🔥2
Презентации спикеров PG BootCamp Russia 2026 Moscow
Как и обещали, начинаем публиковать материалы с прошедшей конференции. Уже можно скачать презентации спикеров. Видео пока что загружаются, нужно еще немного подождать.
📑 Скачать презентации (GitHub)
Как и обещали, начинаем публиковать материалы с прошедшей конференции. Уже можно скачать презентации спикеров. Видео пока что загружаются, нужно еще немного подождать.
📑 Скачать презентации (GitHub)
🔥18👍12
Ответы на вопросы спикерам из чата онлайн-трансляции
🔹Вопросы к докладу Станислава Выщепана «Очереди и кэш на Postgres — без Redis, RabbitMQ и Kafka»
❔Вопрос по типам данных. Есть ли инструменты для работы с целыми числами больше 64 разрядов. Т.е. int, который больше, чем 2^64 (ограничение из-за разрядности архитектуры процессора). Речь об индексируемых данных.
❔Сравнение ограничено только RabbitMQ и Kafka. Рассматривали ли Вы позиционирование PgSQL как замену инфраструктуры данными с ESB-решениями? Да/нет, почему, какие преимущества?
🔹Вопрос к докладу Константина Ващенкова «Опыт эксплуатации, проблемы и производительность PostgreSQL на Эльбрус, Baikal-S, Loongson/Иртыш, Repka Pi, x86»
❔Учитывает ли планировщик запросов PostgreSQL какие-то особенности архитектуры "Эльбрус" (например, очень большой набор регистров), или он работает в "эмуляции" x86, и мы теряем потенциал производительности?
🔹Вопрос к докладу Кирилла Боровикова «Highload «из ниоткуда»: когда проблема не в СУБД, а в клиентской архитектуре»
❔В каком приложении ведется логирование процесса разбора проблемы? Чтобы можно было передать ссылку разработчику, который столкнулся с подобной ситуацией.
🔹Вопросы к докладу Станислава Выщепана «Очереди и кэш на Postgres — без Redis, RabbitMQ и Kafka»
❔Вопрос по типам данных. Есть ли инструменты для работы с целыми числами больше 64 разрядов. Т.е. int, который больше, чем 2^64 (ограничение из-за разрядности архитектуры процессора). Речь об индексируемых данных.
Ответ: тип numeric позволяет хранить и индексировать числа со 131 072 десятичными цифрами до точки. Для больших чисел придется отыскать или сделать расширение.
❔Сравнение ограничено только RabbitMQ и Kafka. Рассматривали ли Вы позиционирование PgSQL как замену инфраструктуры данными с ESB-решениями? Да/нет, почему, какие преимущества?
Ответ: ESB — это зачастую сервер приложений, API которого может подстраиваться под целевые системы и преобразовывать данные между форматами разных систем. Реализация такого в Postgres видится не вполне целесообразной.
🔹Вопрос к докладу Константина Ващенкова «Опыт эксплуатации, проблемы и производительность PostgreSQL на Эльбрус, Baikal-S, Loongson/Иртыш, Repka Pi, x86»
❔Учитывает ли планировщик запросов PostgreSQL какие-то особенности архитектуры "Эльбрус" (например, очень большой набор регистров), или он работает в "эмуляции" x86, и мы теряем потенциал производительности?
Ответ: вся инсталляция нативна, без бинарной транасляция, то есть чистый e2k. Потенциал производительности – да, теряем, но для этого существуют доработанные, т.е. не ванильные, версии PostgreSQL.
🔹Вопрос к докладу Кирилла Боровикова «Highload «из ниоткуда»: когда проблема не в СУБД, а в клиентской архитектуре»
❔В каком приложении ведется логирование процесса разбора проблемы? Чтобы можно было передать ссылку разработчику, который столкнулся с подобной ситуацией.
Ответ: Процесс разбора обнаруженной ошибки или инцидента производительности ведется внутри нашего же продукта Saby, который сочетает функции как трекера, так и системы внутреннего документооборота.
❤4🔥3
🔹Вопросы к докладу Алексея Копытова «Разделение Compute и Storage: архитектурный прорыв для PostgreSQL в облаке»
❔Вопрос к слайдам 21/22. Зачем нужно было реализовывать fsync(), если на слайде 21 упоминается, что PolarFS работает в O_DIRECT режиме? Возможно, поэтому fsync() и был no-op?
❔Если HAProxy знает кто мастер, и произошла потеря мастера, переключение на standby, может ли оказаться так, что бывший мастер, не имея связи с HAProxy, будет продолжать думать, что он мастер, и тажке проводить запись?
❔Вопрос к слайдам 21/22. Зачем нужно было реализовывать fsync(), если на слайде 21 упоминается, что PolarFS работает в O_DIRECT режиме? Возможно, поэтому fsync() и был no-op?
Ответ: Tantor Polar, как и PostgreSQL, для обеспечения долговечности данных вызывает сброс буферов на диск через аналог fsync() — в API PolarFS это pfsd_fsync() (и соответствующий вызов в libpfs). Без реальной реализации этого вызова нельзя гарантировать, что после сбоя питания или падения узла записанные данные действительно окажутся на постоянном носителе.
В оригинальной открытой реализации PolarFS вызовы pfsd_fsync() и pfs_fsync() были пустыми операциями (noop): они ничего не делали. Причины в коде не задокументированы. Возможные объяснения - в облачной версии PolarFS поверх PolarStore запись могла считаться «автоматически устойчивой» (например, семантика вроде O_SYNC на уровне хранилища). Для блочного устройства (бэкенд PFS_DEV_DISK), которое мы используем, это не применимо. Или же разработчики могли считать, что раз PolarFS использует только небуферизованный I/O (O_DIRECT), явный fsync() не нужен.
На деле O_DIRECT лишь обходит кэш страниц ОС и гарантирует попадание данных в кэш устройства, а не обязательно на энергонезависимый носитель. Считать запись устойчивой можно только если железо гарантирует защиту от потери питания (PLP), а в общем случае — и тем более в программно-определяемом хранилище — полагаться на это нельзя.
Поэтому в нашей доработанной PolarFS исправлено: при вызове pfsd_fsync() / pfs_fsync() теперь принудительно выполняется сброс кэша записи нижележащего блочного устройства (аналог flush на уровне диска). Поведение включается опцией конфигурации diskdev_flush_enable (по умолчанию включено). Это даёт Tantor Polar корректную гарантию долговечности при использовании PolarFS на произвольном блочном устройстве или кластере хранения.
❔Если HAProxy знает кто мастер, и произошла потеря мастера, переключение на standby, может ли оказаться так, что бывший мастер, не имея связи с HAProxy, будет продолжать думать, что он мастер, и тажке проводить запись?
Ответ: Patroni с DCS (etcd/Consul) – единый источник истины о том, кто сейчас мастер. Эпоха увеличивается при каждом failover. Shared storage с fencing – при переключении новый мастер получает эксклюзивное право на запись в общее хранилище. Даже если на реплике случайно или намеренно выполнить promote, эта операция провалится – реплика не сможет перемонтировать storage в режим RW, так как shared storage уже захвачен действующим мастером. HAProxy в этой схеме отвечает только за маршрутизацию клиентского трафика, но не за предотвращение split-brain – эту работу делают Patroni и shared storage. Так что потеря связи с HAProxy не позволяет старому мастеру навредить данным.
ProxySQL с группой репликации – в нашей архитектуре мы используем ProxySQL, в котором группа репликации допускает только один пишущий узел. Роли узлов периодически проверяются в отдельном потоке мониторнга. Это гарантирует, что даже если какой-то узел по ошибке считает себя мастером, пишущий трафик на него не пойдёт. Таким образом, даже при полной потере связи между компонентами, ни один узел не сможет несанкционированно писать в данные.
🔥4❤1
🔹Вопросы к докладу Александра Никитина «Работа с логами PostgreSQL»
❔Используются в Вашей организации ИИ-агенты для анализа логов?
❔Отдел безопасности очень хочет видеть все изменения в БД, я смог им предложить только log_statements = all. Можно ли как-то этого избежать?
❕Напоминаем: презентации спикеров уже доступны, а видео выступлений мы выложим и оповестим вас в ближайшее время.
❔Используются в Вашей организации ИИ-агенты для анализа логов?
Ответ: Нет, мы не используем ИИ для анализа логов
❔Отдел безопасности очень хочет видеть все изменения в БД, я смог им предложить только log_statements = all. Можно ли как-то этого избежать?
Ответ: Если интересуют изменения, то всё-таки - log_statement=mod должно вам подойти - all будет включать в себя и запросы (SELECT), которые вряд ли будут интересовать безопасников. Возможно, отделу безопасности не хочется видеть абсолютно все изменения, а только изменения на каких-то конкретных таблицах? Ведь объём изменений в БД очень велик и со временем он начнёт превышать размер самой БД. Если можно ограничиться конкретными таблицами, то можно посмотреть в сторону дополнительных расширений типа pgaudit или рассмотреть создание триггеров, на интересующих их таблицах. В любом случае, нужно исходить именно от поставленной задачи.
❕Напоминаем: презентации спикеров уже доступны, а видео выступлений мы выложим и оповестим вас в ближайшее время.
🔥6👍2
Друзья!
Видеозаписи докладов и фотоотчет с PG BootCamp Russia 2026 Moscow готовы.
Для вашего удобства просмотр доступен на:
📌 Rutube
📌 Youtube
Также доступен фотоотчет с конференции:
📌 Облако с фотографиями
Приятного просмотра!
Видеозаписи докладов и фотоотчет с PG BootCamp Russia 2026 Moscow готовы.
Для вашего удобства просмотр доступен на:
Также доступен фотоотчет с конференции:
Приятного просмотра!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👍10❤9⚡2
Forwarded from Pangolin Community
Привет, это Павел Селезнев, участник команды Pangolin. Пару недель назад я выступил на PG BootCamp с докладом «Временные таблицы для PostgreSQL. Почему это важно для платформы 1С и что можно улучшить?».
⏯️ Запись доклада можно посмотреть по ссылке
После выступления мне задали несколько интересных вопросов. На два из них я ответил в прошлом посте. Сегодня продолжу и разберу вопрос о медленной работе оператора UPDATE. Спасибо автору за вопрос и за то, что позже прислал почтой дополнительные детали👍
Схема базы данных
Таблица cmn_object (назовем её «Справочник идентификаторов»)
Таблица od_structure_extension (назовем её «Справочником апартаментов»)
Таблица _result (назовем её «Доступными апартаментами»)
Проблемный запрос
-----------------
Задача: требуется обновить те апартаменты, которые есть в _result и не заняты.
Проблема: запрос выполняется очень медленно.
Уточним, что:
1) Проблема не относится к временным таблицам, если мы уберём ключевое слово TEMP, то она сохранится
2) Оптимизатор ошибается со статистикой, т.к. она не актуальна. Поэтому в начале здесь у нас происходит self join (то есть декартово произведение таблицы саму на себя), и далее идёт фильтрация миллионов строк.
✔️ Возможные решения
1) Можно переписать запрос так:
2) Если запрос редко выполняется, то можно запустить Analyze перед ним.
Если вы тоже хотите узнать побольше по теме временных таблиц для PostgreSQL, задавайте вопросы в комментариях — разберу их там, а может, сделаю отдельный следующий пост👌
Подписывайтесь на Pangolin в Max | ВКонтакте
После выступления мне задали несколько интересных вопросов. На два из них я ответил в прошлом посте. Сегодня продолжу и разберу вопрос о медленной работе оператора UPDATE. Спасибо автору за вопрос и за то, что позже прислал почтой дополнительные детали
Схема базы данных
Таблица cmn_object (назовем её «Справочник идентификаторов»)
CREATE TABLE cmn_object
(
id bigint PRIMARY KEY
);
Таблица od_structure_extension (назовем её «Справочником апартаментов»)
CREATE TABLE od_structure_extension
(
id bigint PRIMARY KEY,
object_id bigint ,
common_apartment_number int NOT NULL
);
Таблица _result (назовем её «Доступными апартаментами»)
CREATE TEMP TABLE _result
(
identity_column bigint NOT NULL,
object_id bigint NOT NULL,
living_rooms_amount varchar(30)
)
Проблемный запрос
-----------------
Задача: требуется обновить те апартаменты, которые есть в _result и не заняты.
UPDATE _result r_u
SET living_rooms_amount = ex.common_apartment_number::varchar
FROM _result r
JOIN cmn_object o
ON r.object_id = o.id
JOIN no.od_structure_extension ex
ON ex.object_id = o.id
WHERE r_u.identity_column = r.identity_column
AND r.living_rooms_amount IS NULL;
Проблема: запрос выполняется очень медленно.
Уточним, что:
1) Проблема не относится к временным таблицам, если мы уберём ключевое слово TEMP, то она сохранится
2) Оптимизатор ошибается со статистикой, т.к. она не актуальна. Поэтому в начале здесь у нас происходит self join (то есть декартово произведение таблицы саму на себя), и далее идёт фильтрация миллионов строк.
✔️ Возможные решения
1) Можно переписать запрос так:
UPDATE _result u
SET living_rooms_amount = (
SELECT ex.common_apartment_number::varchar
FROM no.cmn_object o
JOIN no.od_structure_extension ex
ON ex.object_id = o.id
WHERE o.id
= u.object_id
LIMIT 1
)
WHERE u.living_rooms_amount IS NULL
AND EXISTS (
SELECT 1
FROM no.cmn_object o
JOIN no.od_structure_extension ex
ON ex.object_id = o.id
WHERE o.id
= u.object_id
);
2) Если запрос редко выполняется, то можно запустить Analyze перед ним.
Если вы тоже хотите узнать побольше по теме временных таблиц для PostgreSQL, задавайте вопросы в комментариях — разберу их там, а может, сделаю отдельный следующий пост
Подписывайтесь на Pangolin в Max | ВКонтакте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3🔥2