172 похожих чатов

Всем привет. Подскажите плиз, почему по той таблице, по тому

же плану с тем же индексом, по тому же условию и с тем же количеством строк (ноль строк!)
Если в запрос добавить второй LEFT JOIN, то
BitmapIndexScan начинает работать в 1800 раз медленнее?
(обратите внимание, что function scan для этого джойна в плане находится гораздо позже)

Ноль строк в результате:
https://explain.depesz.com/s/ayqq - один джойн
https://explain.depesz.com/s/GsAR - два джойна

1370 строка в результате:
https://explain.depesz.com/s/IQfT - один джойн
https://explain.depesz.com/s/rLCp - два джойна

0 строк, текстовый план:
https://explain.depesz.com/s/0rYv -- один джойн
https://explain.depesz.com/s/FtqW — два джойна

1370 строк, текстовый план:
https://explain.depesz.com/s/uvUg — один джойн
https://explain.depesz.com/s/WATZ — два джойна
Сервер версии 13.1

#konkove #proposition

21 ответов

12 просмотров

Подскажите плиз, почему Вы продолжаете публиковать JSON plans, хотя Вас уже (не раз?) просили этого не делать? ;)

Eugen- Автор вопроса

Дополнил explain

Eugen- Автор вопроса
Yaroslav Schekin
Подскажите плиз, почему Вы продолжаете публиковать...

Такие опции в рекомендациях на сайтах: https://explain.dalibo.com/ http://tatiyants.com/pev/#/plans/new а на depesz нет примера рекомендуемых опций (((

Eugen- Автор вопроса
Yaroslav Schekin
Подскажите плиз, почему Вы продолжаете публиковать...

Напомните пожалуйста опции 😇 и я заодно напишу depesz в обратную связь ** всё. нашел в чате: EXPLAIN( ANALYSE, COSTS, VERBOSE, settings, buffers )

Eugen
Такие опции в рекомендациях на сайтах: https://exp...

И что? Я же уже Вам писал, почему так лучше — я читаю текстовые планы, например. А то, что показывает https://explain.depesz.com в таком случае — это результат конвертации, которая может быть неправильной (в т.ч. неполной).

Eugen
Напомните пожалуйста опции 😇 и я заодно напишу dep...

"Максимальные" для SELECT-ов в используемой Вами версии — это EXPLAIN (ANALYZE, VERBOSE, BUFFERS, SETTINGS). default COSTS = true, кстати.

Eugen- Автор вопроса

Yaroslav добавил ссылки на текстовый план Спасибо за замечания

Eugen
Yaroslav добавил ссылки на текстовый план Спасибо...

Хмм... а точно первый план был с BUFFERS? Потому что такое, например, в нём есть: -> Bitmap Index Scan on order_id_sys_period_app_period_excl (cost=0.00..4.86 rows=33 width=0) (actual time=0.412..0.412 rows=0 loops=1) Index Cond: ((o.sys_period @> sys_time()) AND (o.app_period && $3)) А shared hit вообще нет. Или эта таблица (и т.д.) на самом деле пустая?

Eugen- Автор вопроса
Eugen- Автор вопроса
Yaroslav Schekin
Хмм... а точно первый план был с BUFFERS? Потому ч...

buffers, кастати есть. Посмотрите плиз https://explain.depesz.com/s/FtqW#l1 почему его нет ниже - это вопрос. ммм, видимо да. Отсутвие buffers походу замедляет выполнение запроса. И почему же buffers нет для остальных планов? )

Eugen
buffers, кастати есть. Посмотрите плиз https://exp...

Нет, совсем их нет при выполнении запроса. Только при планировании, и это как-то странно.

Потому, что после шэсти повторений воззвания к _app_period() в запросе постгрес решыл запустить JIT и тот работал секунду. То, что его отнесли к первому скану -- это артэфакт показа планов. ЗЫ И да, вы так не делайте (c). Вот серьёзно, вопрос с JIT-то решыть можно, конечно, запретом например -- но сам по себе веер одинаковых нематериализованных вызовов табличной функцыи выглядит крайне эклектично.

Ilya Anfimov
Потому, что после шэсти повторений воззвания к _ap...

> Потому, что после шэсти повторений воззвания к _app_period() в запросе постгрес решыл запустить JIT и тот работал секунду. Хмм... почему Вы думаете, что решение о запуске JIT вообще от этого зависит?

Yaroslav Schekin
> Потому, что после шэсти повторений воззвания к _...

Потому, что во-первых это логично, во-вторых -- это вообще одно из немногих отличий запросов, которые могли к нему привести.

Ilya Anfimov
Потому, что во-первых это логично, во-вторых -- эт...

Не вижу логики. Вы какой JIT имеете в виду? Если в основном запросе, то он не prepared, т.е. JIT от количества запусков не зависит. Если внутри функций, то при стандартных настройках JIT все использованные функции явно обрабатываться не будут.

Yaroslav Schekin
Не вижу логики. Вы какой JIT имеете в виду? Если в...

Впрочем, Вы правы. В данном случае он запускается скорее из-за того, что планнер считает, что ещё один join acc_ready увеличит результат в 500 раз и всё всё равно будет выполняться десятками секунд.

Yaroslav Schekin
Не вижу логики. Вы какой JIT имеете в виду? Если в...

И да, там вряд ли стандартные настройки JIT.

Ilya Anfimov
Впрочем, Вы правы. В данном случае он запускается ...

Да, я тоже так прочитал план. > И да, там вряд ли стандартные настройки JIT. Стандартные. Это EXPLAIN( ANALYSE, COSTS, VERBOSE, SETTINGS, BUFFERS), обратите внимание.

Ilya Anfimov
Потому, что после шэсти повторений воззвания к _ap...

Там Jit занимает 750мс. На тот join на самом деле ушло дополнительно 350мс. А проблема тут ещё в другом, что кардинальность сильно не сходится. А из-за этого оптимальный план может быть другим. Я бы вначале запрос с определением app_period выполнил отдельно, подставив его результат в второй CTE, и посмотрел на результат.

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта