powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Materialized view
18 сообщений из 18, страница 1 из 1
Materialized view
    #40124473
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Наш проект интенсивно использует join'ы по многим таблицам за раз. Поскольку производительность оставляет желать лучшего, было принято решение попробовать materialized view - согласно документации, они как раз нужны в том числе для "кэширования результатов join'ов по многим таблицам". После создания mv оказалось, что чтение типа 'select * from mv_results' по времени занимает ровно столько же, сколько и оригинал 'select ... from...join...join...'. Я что-то понял не так? Что-то делаю не так?

Спасибо.
...
Рейтинг: 0 / 0
Materialized view
    #40124493
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по всему, Вы сделали обычный view или слишком много строк в результате.
Так же стоит учесть, что мат.представление нужно обновлять и ещё можно/нужно построить индекс.
...
Рейтинг: 0 / 0
Materialized view
    #40124511
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Kurkin
Доброго времени суток!

Наш проект интенсивно использует join'ы по многим таблицам за раз. Поскольку производительность оставляет желать лучшего, было принято решение попробовать materialized view - согласно документации, они как раз нужны в том числе для "кэширования результатов join'ов по многим таблицам". После создания mv оказалось, что чтение типа 'select * from mv_results' по времени занимает ровно столько же, сколько и оригинал 'select ... from...join...join...'. Я что-то понял не так? Что-то делаю не так?

Спасибо.


Вы к таким вопросам всегда результаты explain analyze прикладывайте.
Без этого это дискуссия про сферического коня в вакууме будет.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Materialized view
    #40124555
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Версия: PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit

Ссылка на план: https://explain.depesz.com/s/ydKZ#html
...
Рейтинг: 0 / 0
Materialized view
    #40124556
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guzya,

Нет, там всего ~30k строк. Вот statement создания:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create materialized view mv_active_proposals as
select prop."Id" as prop_Id...
FROM...
INNER JOIN...
LEFT JOIN...
LEFT JOIN...
LEFT JOIN...
LEFT JOIN...
LEFT JOIN...
LEFT JOIN...
LEFT JOIN...
WHERE prop."ReviewId" = 79
...
Рейтинг: 0 / 0
Materialized view
    #40124578
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Kurkin
Maxim Boguk,

Версия: PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit

Ссылка на план: https://explain.depesz.com/s/ydKZ#html


Т.е. скорость 10ms вас не устраивает на 30000 строк (не идеальная скорость но в общем вполне разумная)?
А какая скорость была у JOIN решения (тоже с explain analyze)?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Materialized view
    #40124580
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажите

explain (analyze,buffers) select * from mv_active_proposals;
и
select pg_size_pretty(pg_relation_size('mv_active_proposals'));
...
Рейтинг: 0 / 0
Materialized view
    #40124711
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guzya,

Вот:
1) https://explain.depesz.com/s/Tqq1u

2)
pg_size_pretty|
--------------+
8816 kB |
...
Рейтинг: 0 / 0
Materialized view
    #40124712
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Кажется это сеть (точнее ВПН) вносит существенные задержки
...
Рейтинг: 0 / 0
Materialized view
    #40124725
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Kurkin
Maxim Boguk,

Кажется это сеть (точнее ВПН) вносит существенные задержки


У вас ожидаемый размер ответа мегабайт 20-30... естественно что по сети это не мгновенно пролезает и скорость работы запросов на базе тут вообще не причём.

PS: я что то не могу себе бизнес задачу представить где надо на клиента 20MB ответ тащить с базы и при этом важна latency.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Materialized view
    #40124729
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Необходимо ~30k сотрудников на фронте показывать. Paging юзать нельзя так как вся фильтрация происходит тоже на фронте.

PS: ответ от БД летит иногда 10 секунд - для 30Mb кажется многовато
...
Рейтинг: 0 / 0
Materialized view
    #40124748
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему 20-30мб если размер мат.представлеия 8мб и считывается около 1000 блоков.

Сам запрос выполняется за 8мс, вопросов со стороны бд вроде быть не должно.

Хотя, может какие не удачные моменты, поставьте log_min_duration... Например в 10мс и потом смотрите в логе, имело ли место долгое выполнение запроса.
...
Рейтинг: 0 / 0
Materialized view
    #40124753
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Kurkin
Необходимо ~30k сотрудников на фронте показывать. Paging юзать нельзя так как вся фильтрация происходит тоже на фронте.
вы кмк откровенно бредите, 30K записей выкидывать в браузер - это ну очень оптимистично, если вы попытаетесь подобные примеры в интернете найти, то можно обнаружить, что тот же google docs в таблицах вместо реальных строк показывает картинки.
...
Рейтинг: 0 / 0
Materialized view
    #40124792
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
А почему 20-30мб если размер мат.представлеия 8мб и считывается около 1000 блоков.

Сам запрос выполняется за 8мс, вопросов со стороны бд вроде быть не должно.

Хотя, может какие не удачные моменты, поставьте log_min_duration... Например в 10мс и потом смотрите в логе, имело ли место долгое выполнение запроса.


1)потому что pg_relation_size - не учитывает toast поля это раз (а в таких запросах их немало может быть)
и надо select pg_size_pretty(pg_table_size('mv_active_proposals')); смотреть
и даже это некорректно

2)потому что то как оно на диске лежит - оно намного компактнее чем по сети передаётся в ответ на запросы

более менее реалистичный размер подсчитать можно сделав
psql -t -A -d datname -c 'select * from mv_active_proposals' > /tmp/res.out
и посмотрев на размер ответа.
обычно раза в 2-3 больше чем на диске если если длинные текстовые поля в таблице.



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Materialized view
    #40124903
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,

Вот эта либа на фронте юзается: https://www.ag-grid.com/. Она легко тянет этот объем данных. Основная задача, которую она решает - мгновенная фильтрация/сортировка данных без обращения к backend'у.
...
Рейтинг: 0 / 0
Materialized view
    #40124904
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

БД уже вне зоны досягаемости (только админов просить если). Судя по всему, основное время действительно тратится на передачу данных по сети
...
Рейтинг: 0 / 0
Materialized view
    #40124905
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Kurkin
Maxim Boguk,

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


могу только посоветовать не тащить все поля с матview а отобрать тот минимальный список что нужен для работы и выбирать только его (тогда и траффика меньше будет).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Materialized view
    #40125082
Dmitry Kurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Вся проблема в том, что там как раз тот необходимый минимум полей.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Materialized view
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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