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

Хочу ускорить выполнения запроса. Подскажите, пожалуйста, как это можно сделать? 1.

Версия Postgres — 12.5
2. Запрос — https://pastebin.com/qchr3RSe
3. \d каждой используемой таблицы — https://pastebin.com/eHdPkiXy
4. План запроса — https://pastebin.com/ictUie93

24 ответов

9 просмотров
Setplus-Mac Автор вопроса

Я думал в сторону секционирования таблицы по event_id Мб, кто-то другое, более изящное решение предложит

Не в тему оптимизации запроса, но мне больно смотреть на условие по дате sm_table_1.datetime <= '2022-07-26 23:59:59' Время 26 июля 23:59:59.001-23:59:59.999 ехидно улыбается где-то в стороне, ДБА рвет волосы на голове, а бизнес пытается найти для клиента, оплатившего счёт, оправдание, почему в системе счёт светится неоплаченным, параллельно разрывая телефоны техподдержки платежного агента Но это так, мысли вслух

Iurii Shaporenko
Не в тему оптимизации запроса, но мне больно смотр...

@Setplus_seC А действительно, почему не datetime < '2022-07-27 00:00:00.000'

Setplus-Mac Автор вопроса

сделал — https://pastebin.com/JkrPawaF вверху — план для множественного OR внизу — план для запроса, где множество OR заменены на IN

Setplus Mac
сделал — https://pastebin.com/JkrPawaF вверху — п...

Очень странно, что во втором случае был использован pkey

Setplus-Mac Автор вопроса
Liman -
Очень странно, что во втором случае был использова...

Согласен. Индекс я честно создал CREATE INDEX ON some_table_1 USING btree(datetime, event_id) INCLUDE(id);

Liman -
Очень странно, что во втором случае был использова...

Скорее всего, запросы просто к разным базам отправлены. Можэт, правда, в процэссе там analyze кто-то запустил, не знаю.

Setplus Mac
Согласен. Индекс я честно создал CREATE INDEX ON ...

А, впрочем, если создали индэкс после выполнения одного запроса и до выполнения другого -- то можэт быть, можэт быть.

Setplus-Mac Автор вопроса
Ilya Anfimov
А, впрочем, если создали индэкс после выполнения о...

После создания индекса выполнил оба запроса,

Setplus Mac
После создания индекса выполнил оба запроса,

Ерунда какая-то. Запросы разные из-за разных оцэнок количества столбцов по условию (4.9 млн vs 4.6 млн) -- а они по идее оцэниваются одинаково что в OR с константами что в ANY с константным массивом. Ладно, это на самом деле тут вообще не важно.

Setplus Mac
Я думал в сторону секционирования таблицы по event...

Вообще, некоторая проблема этого захода -- в том, что у вас тут везде фиаско какое-то. Логичный индэкс неиспользуется. index-only скана нет. Параллелизма нет. Дисковая подсистема тормозит как в 90-х. В таблицэ куча каких-то мусорных индэксов. Вкрячена какая-то сортировка с лимитом -- непонятно, зачем и на что она влияет. И ещё автор всего это дела заявляет, что индэксы на основные поля, по которым идёт поиск и выборка -- не приведены, поскольку не имеют значения. В ситуацыи такого полного фиаско, конечно, любое осмысленное действие будет улучшать ситуацыю. Но это не значит, что это осмысленное действие будет разумным.

Setplus-Mac Автор вопроса
Ilya Anfimov
Вообще, некоторая проблема этого захода -- в том, ...

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

Setplus-Mac Автор вопроса
Ilya Anfimov
Да я ещё и спрашывать не начал.

отвечу —> прокомментирую

1.Второй тожэ глубоко безсмысленнен при наличии первого. 3. Думать, что мешает серверу, пытаться (хотя бы не запуская, чисто explain) смотреть, при каких условиях хоть что-то работает параллельно, и вообще postgres способен так работать, смотреть, при каких условиях оно ломается и как совместить бизнес-требования и параллельность. > 4. ... CEPH Источник боли понятен и очевиден. Если интересует скорость -- просто не делайте так, конечно. Хотя конкретно этот запрос вероятно сможэт отработать с приемлемой скоростью через index-only range scan -- всё равно, у вас там ещё детализирующий запрос, с ним примерно в любом случае будет плохо всё.

Setplus-Mac Автор вопроса
Ilya Anfimov
1.Второй тожэ глубоко безсмысленнен при наличии пе...

Как я понял, пока что единственный вариант ускорить запрос — сделать секционирование таблицы

Setplus-Mac Автор вопроса
Ilya Anfimov
Ну, поняли и поняли.

Спасибо за уделённое время!

Setplus Mac
Как я понял, пока что единственный вариант ускорит...

На самом деле -- вам надо найти толкового DBA, который сможэт научить вас уму-разуму.

Setplus-Mac Автор вопроса

Не очень понял, если честно, о чём идёт речь. Не могли чуть подробнее написать?

Setplus Mac
Не очень понял, если честно, о чём идёт речь. Не м...

Читать примерно вот этот раздел: https://www.postgresql.org/docs/current/runtime-config-query.html Весь и вдумчиво. И да, если у вас необычная система -- то правильные косты тожэ будут необычными... ЗЫ Кстати, что у вас говорит SELECT name, setting, unit FROM pg_settings WHERE name LIKE '%cost'; ?

Setplus-Mac Автор вопроса

Почему? Готов исправиться.

Setplus Mac
Почему? Готов исправиться.

Потому, что помнится индэкс был (event_id, datetime, id).

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

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

Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
2
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
у меня программа тысяч на 10 строк. Там в основном моя собственная логика. А по содержанию она просто работает с файловой системой (мастер для бэкапов) и таблицей с данными о ...
Дмитрий Завгородний
5
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Карта сайта