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

А мы почему не видим? (но я и не слежу особо!)

19 ответов

24 просмотра

Прошу прощения, но мне можно верить на слово)

Роман-Жарков Автор вопроса
Maksim Trempoltsev
Прошу прощения, но мне можно верить на слово)

Тогда и мне поверьте: там - в плане - есть информация для сравнения и по ней можно понять "почему" был выбран тот или другой в обоих случаях.

Роман Жарков
Тогда и мне поверьте: там - в плане - есть информа...

Плохой план: Limit (cost=18.04..488920.08 rows=20 width=337) -> Append (cost=18.04..464994744.47 rows=19022 width=337) Subplans Removed: 34 -> Index Scan Backward using xxx_2023_05_01_pkey on xxx_2023_05_01 xxx_13 (cost=0.57..23794568.98 rows=36 width=313) Index Cond: ((added_at <= CURRENT_TIMESTAMP) AND (added_at >= (CURRENT_TIMESTAMP - '1 year'::interval)) AND (tenant = 1)) Filter: (related && ARRAY[('(1234567,yyy)'::xxx.id_and_type)::xxx.id]) ... + несколько партиций Хороший план: Limit (cost=21630.69..21630.74 rows=20 width=337) -> Sort (cost=21630.69..21678.25 rows=19023 width=337) Sort Key: xxx.added_at DESC -> Append (cost=0.29..21124.50 rows=19023 width=337) Subplans Removed: 34 -> Bitmap Heap Scan on xxx_2023_05_01 xxx_13 (cost=6.29..44.40 rows=37 width=313) Recheck Cond: (related && ARRAY[('(1234567,yyy)'::xxx.id_and_type)::xxx.id]) Filter: ((tenant = 1) AND (added_at <= CURRENT_TIMESTAMP) AND (added_at >= (CURRENT_TIMESTAMP - '1 year'::interval))) -> Bitmap Index Scan on xxx_2023_05_01_related_idx (cost=0.00..6.28 rows=37 width=0) Index Cond: (related && ARRAY[('(1234567,yyy)'::xxx.id_and_type)::xxx.id]) ... + несколько партиций Иногда (иногда) планировщик выбирает первый план, следующий запрос с абсолютно идентичными параметрами уже идет по второму плану. PK: added_at TIMESTAMPTZ, id UUID, tenant INT Партиционирование по added_at и tenant

Maksim Trempoltsev
Плохой план: Limit (cost=18.04..488920.08 rows=20...

В третий раз закинул он невод: https://t.me/pgsql/303899 Вы, наверное, на самом деле не хотите реальной помощи?

Ярослав, если вы хотите и можете помочь, то напишите чего именно не хватает, так как мне кажется, что я уже всю информацию по списку дал. И спасибо всем за помощь.

Maksim Trempoltsev
Ярослав, если вы хотите и можете помочь, то напиши...

Можете хотя бы дать ссылки на все четыре пункта? А ещё лучше было бы собрать их все в одном месте (сообщении со вложенным файлом, или ссылкой на paste site). > ANALYZE дать не могу, так как такая настройка auto_explain Да хотя бы один план (запроса, выполненного из своей сессии) с EXPLAIN (ANALYZE, VERBOSE, BUFFERS, SETTINGS) нам покажите.

Yaroslav Schekin
Можете хотя бы дать ссылки на все четыре пункта? А...

Я могу показать только explain хорошего плана. Это поможет? Я не могу получить explain плохого плана так как планировщик выбирает его довольно редко и воспроизвести руками я не могу. Я же объясняю, что один и тот же запрос с одинаковыми параметрами чаще идет по хорошему плану, но иногда без видимых причин идет по плохому

Maksim Trempoltsev
Я могу показать только explain хорошего плана. Это...

> Но кажется и так понятно Мне пока вообще ничего не понятно — потому что без полной информации смотреть бесполезно, понимаете? > Хинт все лечит Откуда это Вы в PostgreSQL взяли hint?! Вот потому-то и нужно показать все 4 (четыре! 1+1+1+1! я уже не знаю, как ещё написать :( ) пункта! > Я могу показать только explain хорошего плана. Это поможет? Да, это может помочь. > но иногда без видимых причин идет по плохому Что странно, и, скорее всего, потребуется и дополнительная информация, но сначала... см. выше.

Maksim Trempoltsev
Я могу показать только explain хорошего плана. Это...

Ну и, как вариант — тоже можете испытать на себе https://t.me/pgsql/474330 (может, хоть так мы получим нужную информацию). ;)

Yaroslav Schekin
> Но кажется и так понятно Мне пока вообще ничего...

>Откуда это Вы в PostgreSQL взяли hint?! https://postgrespro.com/docs/enterprise/14/pg-hint-plan >я уже не знаю, как ещё написать Ярослав, прошу прощения, я понимаю, что выглядит так, что я туплю, но мне сложно дать всю информацию, почему я написал. Пожалуйста, не обращайте внимания, я не настаиваю.

Yaroslav Schekin
Ну и, как вариант — тоже можете испытать на себе h...

Простите, к таким экспериментам на проде я не готов )

Роман-Жарков Автор вопроса
Maksim Trempoltsev
>Откуда это Вы в PostgreSQL взяли hint?! https://...

А Enterprise тут случайно в ссылке или у вас действительно он стоит?

Maksim Trempoltsev
Простите, к таким экспериментам на проде я не гото...

А к чему Вы готовы? К тому, чтобы все дружно гадали, что там у вас не так (в неведомом fork-е неведомой версии и таблицах неизвестной нам структуры)? Так из этого почти наверняка ничего не выйдет, кроме траты времени участников.

Роман-Жарков Автор вопроса
Роман-Жарков Автор вопроса
Maksim Trempoltsev
14

test=# select version(); version ----------------------------------------------------------------------------- PostgreSQL 15.2-MY-EXTRA-VERSION, compiled by Visual C++ build 1936, 64-bit (1 row)

Maksim Trempoltsev
Простите, к таким экспериментам на проде я не гото...

И да... а тестового сервера (копии кластера) в вашем "энтерпрайзе" нет? ;)

Maksim Trempoltsev
Плохой план: Limit (cost=18.04..488920.08 rows=20...

Ну, надо заметить, что если всё так, как вы пишэте — то стоимость запроса отличается всего вдвое. А скорость, как вы говорите — в десятки раз. Значит, или планировщик ошыбся с эстимейтами (в одном случае они во много раз большэ, чем в другом) — или у него неправильное соотношэние коэффицыентов (например, на самом деле доступ идёт через ceph какой-нибудь, и любой доступ к диску в десять тысяч раз дорожэ доставания тупла из памяти, а не в сто). Считайте эстимейты, определяйте сколько там на самом деле и сколько насчитал планировщик, оцэнивайте относительные скорости...

Ilya Anfimov
Ну, надо заметить, что если всё так, как вы пишэте...

Косты в 22 раза отличаются. Про тюнинг коэффициентов хорошая мысль, спасибо

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта