Узкое место 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 - Специальная скидка и информация о вопросах и ответах