Перейти к содержимому

Узкое место PostgreSQL LISTEN/NOTIFY: что мы узнали в продакшене

Jimmy Angelakos

0:00 / 0:00

Узкое место PostgreSQL LISTEN/NOTIFY: что мы узнали в продакшене

470 просмотров · 2 месяца назад
Jimmy Angelakos
1,07 тыс. подписчиков
470 просмотров · 2 месяца назад
Подписывайтесь на меня: 🦣 https://fosstodon.org/@vyruss 🦋 https://bsky.app/profile/vyruss.org   / vyruss   Используете ли вы функции LISTEN и NOTIFY в PostgreSQL для асинхронного межпроцессного взаимодействия (IPC)? Несмотря на свою элегантность и легкость, они могут скрывать серьезное узкое место в производительности вашей высокопроизводительной производственной базы данных. В этом докладе с конференции POSETTE: An Event for Postgres 2026 Джимми Ангелакос (старший инженер-программист в pgEdge) рассказывает о реальном инциденте в производственной среде, когда NOTIFY непреднамеренно привел к полной остановке работы загруженной базы данных. Вы узнаете, как внутренняя сериализация уведомлений может вызывать каскады блокировок в глобальном каталоге базы данных, и, что более важно, как разработать надежное решение с использованием нелогированных таблиц, консультативных блокировок и пакетной обработки для утроения пропускной способности транзакций. Что вы узнаете: Как работают команды LISTEN и NOTIFY в PostgreSQL. Скрытая ловушка «случайной сериализации» и как она запускает блокировки AccessExclusive на pg_database. Пошаговые архитектурные решения для отделения отправки уведомлений от фиксации транзакций. Как использовать таблицы очередей без логирования и консультативные блокировки на уровне транзакций (pg_try_advisory_xact_lock) для пакетной отправки уведомлений без блокировки базы данных. Рекомендации по предотвращению использования NOTIFY в критически важных процессах вашего приложения. Разделы видео: 00:00 - Введение и информация о докладчике 01:30 - Понимание функций LISTEN и NOTIFY в PostgreSQL 03:25 - Как это работает как IPC внутри Postgres 06:32 - Забавные истории из производственной среды: архитектура обработки инцидентов 07:57 - Симптомы: каскады блокировок и скачки времени ожидания 10:40 - Ловушка: объяснение случайной сериализации 13:09 - Изучение решений (почему исправление на стороне приложения не сработало) 14:36 ​​- Исправление на стороне базы данных: таблицы очереди уведомлений 18:07 - Внедрение консультативных блокировок для безопасной пакетной обработки 21:22 - Стресс-тестирование решения 23:33 - Безопасное логирование и мониторинг длины очереди 24:04 - Результаты: утроение пропускной способности транзакций 24:39 - Итоги и лучшие практики 25:30 - Специальная скидка и информация о вопросах и ответах