Выбор ответа Senior Базы данных в эксплуатации обновлено

Режимы PgBouncer

Вопрос

После перевода PgBouncer в режим transaction у приложения начались странные ошибки с SET search_path и advisory-блокировками. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Соединение с сервером даётся клиенту лишь на транзакцию, сессионное состояние теряется. В transaction-режиме следующая транзакция клиента может пойти по другому серверному соединению.

Варианты ответа

  1. Соединение с сервером даётся клиенту лишь на транзакцию, сессионное состояние теряетсяправильный ответ
  2. PgBouncer в режиме transaction блокирует SET и advisory-функции на уровне протокола
  3. Режим transaction отключает индексы и планировщик для запросов, идущих через пул
  4. Это ошибка версии PostgreSQL, которую исправляет обновление минорного релиза

Разбор

В transaction-режиме следующая транзакция клиента может пойти по другому серверному соединению. Всё, что живёт дольше транзакции (SET без LOCAL, сессионные advisory-блокировки, LISTEN, временные таблицы), ломается. Лечится SET LOCAL, транзакционными блокировками или режимом session для таких клиентов. Запросы и индексы работают нормально.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме