Size: a a a

pgsql – PostgreSQL

2021 March 19

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
У меня дежавю, что ли... а, нет — https://t.me/pgsql/291308 ;)
И \d+ или \sv самого view, кстати.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
А почему там "SELECT DISTINCT"?

Я к тому, что почти всегда это намекает на ошибку в запросе, которую кто-то пытается "замести под ковёр".
Т.е. если это действительно ошибка, зачем дальше разбираться (не вижу смысла оптимизировать неправильные запросы)?
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
А почему там "SELECT DISTINCT"?

Я к тому, что почти всегда это намекает на ошибку в запросе, которую кто-то пытается "замести под ковёр".
Т.е. если это действительно ошибка, зачем дальше разбираться (не вижу смысла оптимизировать неправильные запросы)?
по таблице meth.route_transfer, которая самая последняя по запросу возвращаются несколько записей.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
по таблице meth.route_transfer, которая самая последняя по запросу возвращаются несколько записей.
И поэтому из них выбираются произвольные производные записи?
Это и есть попытка "замести проблему под ковёр", нет? ;)

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

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
И поэтому из них выбираются произвольные производные записи?
Это и есть попытка "замести проблему под ковёр", нет? ;)

Т.е. если возвращается несколько записей, то стоит подумать, значения из какой (или какие, если их надо группировать — максимумы/минимумы и т.п.) нужны в результате и почему.
сейчас с помощью lateral отбиру только 1 запись, уберу disitnct
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
сейчас с помощью lateral отбиру только 1 запись, уберу disitnct
Хорошо. А потом, если проблема останется — всё же, покажите всё, о чём я спрашивал (можно без \d таблиц, для начала).
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
Хорошо. А потом, если проблема останется — всё же, покажите всё, о чём я спрашивал (можно без \d таблиц, для начала).
https://explain.depesz.com/s/o3Ym - explain analyze запроса
https://explain.depesz.com/s/fh5w - вьюшка

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

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
https://explain.depesz.com/s/o3Ym - explain analyze запроса
https://explain.depesz.com/s/fh5w - вьюшка

после того как убрал distinct время выполнения лучше стало.
но все равно условие сразу не ставится и тем более не по индексу, и отрабатываются все записи
(Грустно вздыхая) И в третий, кажется, раз:
"Покажите версию PostgreSQL, запрос, \d каждой используемой таблицы, EXPLAIN (ANALYZE, BUFFERS)."
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
(Грустно вздыхая) И в третий, кажется, раз:
"Покажите версию PostgreSQL, запрос, \d каждой используемой таблицы, EXPLAIN (ANALYZE, BUFFERS)."
версия PostgreSQL 11.8 on x86_64-pc-linux-gnu
https://explain.depesz.com/s/8ooc - explain analyze buffers запроса
https://explain.depesz.com/s/fh5w - вьюшка
до этого писали что можно без таблиц, поэтому и не делал...тем более их много же
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
версия PostgreSQL 11.8 on x86_64-pc-linux-gnu
https://explain.depesz.com/s/8ooc - explain analyze buffers запроса
https://explain.depesz.com/s/fh5w - вьюшка
до этого писали что можно без таблиц, поэтому и не делал...тем более их много же
Я подчеркнул/выделил то, что Вы несколько раз подряд не показали, вот и всё.
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
да, этого слова BUFFERS не увидел сразу
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
да, этого слова BUFFERS не увидел сразу
Я же не просто так просил / повторял. ;)
По вопросу, вот это:

> шерстит все соединения которые дают 130 тыс. записей, потом по условию t.column = '112233' - оставляет 6 тыс.записей

Происходит вот из-за этого:
date(MAX(vd.marked_on) FILTER (WHERE vd.is_new) OVER (PARTITION BY dl.id)) AS rebuild_date,

т.е. если условие "протолкнуть" (отфильтровав до вычисления этого выражения), то результат этого будет неправильный.
Поэтому PostgreSQL приходится строить план так, как сейчас есть.
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
Я же не просто так просил / повторял. ;)
По вопросу, вот это:

> шерстит все соединения которые дают 130 тыс. записей, потом по условию t.column = '112233' - оставляет 6 тыс.записей

Происходит вот из-за этого:
date(MAX(vd.marked_on) FILTER (WHERE vd.is_new) OVER (PARTITION BY dl.id)) AS rebuild_date,

т.е. если условие "протолкнуть" (отфильтровав до вычисления этого выражения), то результат этого будет неправильный.
Поэтому PostgreSQL приходится строить план так, как сейчас есть.
спасибо большое,
буду "курить" этот момент/поле
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
спасибо большое,
буду "курить" этот момент/поле
И это только одна проблема.
У Вас в запросе слишком много JOINs для стандартных настроек, что может [очень] плохо влиять на планирование.
Попробуйте потом (только для тестирования!) сначала получить план как обычно, а потом:
SET from_collapse_limit = 20;
SET join_collapse_limit = 20;
EXPLAIN (ANALYZE, BUFFERS) SELECT ...

И проверьте, меняется ли план вообще (если нет — повезло, если да и становится намного лучше — то это следующая проблема).
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
И это только одна проблема.
У Вас в запросе слишком много JOINs для стандартных настроек, что может [очень] плохо влиять на планирование.
Попробуйте потом (только для тестирования!) сначала получить план как обычно, а потом:
SET from_collapse_limit = 20;
SET join_collapse_limit = 20;
EXPLAIN (ANALYZE, BUFFERS) SELECT ...

И проверьте, меняется ли план вообще (если нет — повезло, если да и становится намного лучше — то это следующая проблема).
ну наверное сначала поставить 15, потом 20 ?
а если план изменится в лучшую сторону после 15 (20) - так же можно наверное оставить? в других местах боком не должно выйти .
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
ну наверное сначала поставить 15, потом 20 ?
а если план изменится в лучшую сторону после 15 (20) - так же можно наверное оставить? в других местах боком не должно выйти .
Зачем 15 ставить-то (толку от этого нет)? Либо этих параметров "хватает", либо нет, грубо говоря.
Ах да, и geqo_threshold тоже увеличьте до 20 или более (забыл написать).
Вам же просто нужно один раз узнать, есть ли проблема в самом планировании (планировщик может тупо не находить лучший план, потому что не выполняет исчёрпывающий поиск).

> в других местах боком не должно выйти .

Про "другие места" я ничего не писал. ;)
Изменяйте только в той сессии, где тестируете (я думал, что понятно это написал), конечно.
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
Yaroslav Schekin
Зачем 15 ставить-то (толку от этого нет)? Либо этих параметров "хватает", либо нет, грубо говоря.
Ах да, и geqo_threshold тоже увеличьте до 20 или более (забыл написать).
Вам же просто нужно один раз узнать, есть ли проблема в самом планировании (планировщик может тупо не находить лучший план, потому что не выполняет исчёрпывающий поиск).

> в других местах боком не должно выйти .

Про "другие места" я ничего не писал. ;)
Изменяйте только в той сессии, где тестируете (я думал, что понятно это написал), конечно.
понятно.
я имел ввиду такие настройки на постоянно если оставлять
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Айрат Шайдуллин
понятно.
я имел ввиду такие настройки на постоянно если оставлять
Нет, для "постоянно" это слишком (если есть много подобных запросов)... хотя, с другой стороны, если много подобных запросов, то у них могут быть схожие проблемы. ;)
Кроме шуток, на современном "железе" их можно поднять до 12 без проблем (а то и до 14, зависит от количества индексов и т.п.).
источник

АШ

Айрат Шайдуллин... in pgsql – PostgreSQL
буду смотреть, сравнивать. спасибо
источник

D

Darya in pgsql – PostgreSQL
Здравствуйте, уважаемые участники группы.Помогите,пожалуйста, советом, я аналитик, которому дали доступ к базе на PostgreSQL , но мне кажется у меня что-то с правами. какую таблицу бы я не создавала (data studio), не будет ни одного айди юзера кроме doadmin. Подскажите, пожалуйста, мой ли это косяк или на стороне того,кто выдавал доступы
источник