Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Materialized view / 18 сообщений из 18, страница 1 из 1
02.01.2022, 15:58
    #40124473
Dmitry Kurkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
Доброго времени суток!

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

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

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

Спасибо.


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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
03.01.2022, 14:50
    #40124555
Dmitry Kurkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
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
03.01.2022, 14:52
    #40124556
Dmitry Kurkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
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
03.01.2022, 18:30
    #40124578
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
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
03.01.2022, 19:07
    #40124580
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
Покажите

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

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

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

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

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


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

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

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

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

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

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

Хотя, может какие не удачные моменты, поставьте log_min_duration... Например в 10мс и потом смотрите в логе, имело ли место долгое выполнение запроса.
...
Рейтинг: 0 / 0
05.01.2022, 12:40
    #40124753
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
Dmitry Kurkin
Необходимо ~30k сотрудников на фронте показывать. Paging юзать нельзя так как вся фильтрация происходит тоже на фронте.
вы кмк откровенно бредите, 30K записей выкидывать в браузер - это ну очень оптимистично, если вы попытаетесь подобные примеры в интернете найти, то можно обнаружить, что тот же google docs в таблицах вместо реальных строк показывает картинки.
...
Рейтинг: 0 / 0
05.01.2022, 15:04
    #40124792
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
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
06.01.2022, 00:53
    #40124903
Dmitry Kurkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Materialized view
Андрей Панфилов,

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

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

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


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

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

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


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