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 ответов

22 просмотра

Подскажите плиз, почему Вы продолжаете публиковать 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, и посмотрел на результат.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта