powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / MATERIALIZED VIEW
7 сообщений из 7, страница 1 из 1
MATERIALIZED VIEW
    #39885430
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не нашел подробностей, поэтому может кто подскажет.
Есть внешний источник данных, через *fdw создаю foreign таблицы,
и из них делаю MATERIALIZED VIEW. Здесь вопросов нет? все понятно.
Мне не понятно, что происходит при REFRESH MATERIALIZED VIEW?
Т.е., например, в таблице из 1кк записей изменится только 1 запись,а остальные буду те же или если измененных записей будет 1k/10k. Затраты будут одинаковы, т.е. тупо очищаются и перезаписываются результатом запроса или какая то магия присутствует?
...
Рейтинг: 0 / 0
MATERIALIZED VIEW
    #39885441
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit,

https://github.com/postgres/postgres/blob/REL_11_STABLE/src/backend/commands/matview.c#L314

- создаётся новая табличка. temporary для concurrently refresh
- заполняется методом выполнения запроса через обычную машинерию выполнения запроса, но с сохранением результата в эту табличку. Да, пересчитывается весь matview целиком.
- не concurrently обновление - подменяет файл таблички на новый
- concurrently обновление делает обычные insert/update/delete (см. refresh_by_match_merge, именно запросы и строятся) только различающихся данных

По итогу:
Любой refresh выполняет запрос матвьюхи полностью. В wal пишется только различие данных для concurrently обновления, либо вся полученная таблица с заново построенными индексами для не-concurrently
...
Рейтинг: 0 / 0
MATERIALIZED VIEW
    #39885447
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,спасибо за ответ.
Т.е. я правильно понимаю, что если для заполнения view запрос тяжелый, то до момента исполнения запроса и "подменяет файл таблички на новый" все равно можно будет пользоваться устаревшими данными? Я просто помню в 9.* вроде бы была блокировка эклюзивная или путаю? Хотя может к pg12 все и поменялось.
...
Рейтинг: 0 / 0
MATERIALIZED VIEW
    #39885450
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit,

при concurrently - будут доступны старые данные. Без concurrently - эксклюзивная блокировка и все желающие любым образом прикоснуться к обновляемой матвьюхе - ждут завершение refresh.

Равно применимо для всех версий postgresql, кроме 9.3 где refresh уже был, но CONCURRENTLY опции для него ещё не было.
...
Рейтинг: 0 / 0
MATERIALIZED VIEW
    #39885452
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,спасибо.
Вы как всегда правы. concurrently это мой вариант.
...
Рейтинг: 0 / 0
MATERIALIZED VIEW
    #39885470
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit
Melkij,спасибо.
Вы как всегда правы. concurrently это мой вариант.


Стоит учитывать что если при refresh меняется не 0.1-5% строк а все 100% сток или около того то при CONCURRENTLY
1)будет сильно дольше и тяжелее (легко в 5 раз может быть)
2)будут сильно индексы на матview имеющиеся пухнуть...

для ситуации когда меняется почти все содержимое matview при refresh скорее всего самый эффективный вариант будет сделать новый matview и потом в транзакции удалить старый и переименовать старый в новый.
...
Рейтинг: 0 / 0
MATERIALIZED VIEW
    #39885481
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk, спасибо за уточнение.
Про пункт 1,2 я догадывался.
Буду мелкие слабообновляемые статичные view делать CONCURRENTLY,
c тяжелыми посмотрю, что можно сделать.
Может не совсем по теме вопрос, а если попробовать использовать PipelineDB,
у меня все равно дальше были планы его попробовать использовать для дашбордов и агрегации?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / MATERIALIZED VIEW
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]