2016-11-22 2 views
1

Мы используем Postgres (9.3) Hot Standby для создания копии базы данных только для чтения. У нас есть пользовательский интерфейс, который читается с материализованного представления.Postgres материализованные виды с горячим резервом

Когда мы пытаемся прочитать из материализованного представления в резервной базе данных, запрос зависает.

Материализованный вид занимает ~ 10 секунд для восстановления в основной базе данных. Мы ожидали более 30 минут запроса в резервной базе данных и, похоже, никогда не завершаем.

Примечательно, что материализованный вид существует в резервной базе данных. Конечно, мы не можем его обновить (поскольку БД только для чтения)

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

У кого-нибудь есть это на работе и/или на что рекомендуется работать?

+0

Прекрасно работает для меня в 9.5. Что означает ['pg_stat_activity.waiting'] (https://www.postgresql.org/docs/9.3/static/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW) для вашего резервного запроса? Где/когда/как вы обновляете свой взгляд на основной? Включает ли ваш запрос другие таблицы? –

+0

Может быть проблемой блокировки. Посмотрите в 'pg_locks', если сеанс ожидает блокировки, удерживаемой кем-то другим. –

+0

@LaurenzAlbe да. В процессе восстановления есть исключительная блокировка. Это может показаться проблемой, поскольку этот процесс всегда работает. Не знаете, что делать? –

ответ

0

Согласно PostgreSQL документации - Hot Standby есть способ справиться запросов конфликтов путем присвоения собственных значений

max_standby_archive_delay & max_standby_streaming_delay

, которые определяют максимально допустимую задержку применения WAL. В вашем случае может быть предпочтительным высокое значение.

Смежные вопросы