День добрый. Есть отчёт:срез последних скидок, отбор порядка 50к строк. MSSQL:

исполнение ~40сек
PostgresSQL: исполнение более 50 минут
Проблема только с этим отчётом. В остальном PG быстрее MS ~50%
Проблема в том, что запрос не оптимальный или в PG во что то упирается?

55 ответов

32 просмотра

Тот случай, когда в вопросе уже ответ. Как думаете, если проблема только в одном отчете, то какова вероятность, что проблема в ресурсах для ПГ? ПС: Сделайте замер, возможно сразу покажет на каком запросе проседает(если их много или пакетник), далее снимайте план запроса, находите проблемный этап и отдавайте на оптимизацию кодерам.

Не оптимальный. Упирается если разница в разы, а тут 60 раз

Analyze делали?

“В остальном PG быстрее MS ~50%” - на том же железе?

Иван
“В остальном PG быстрее MS ~50%” - на том же желез...

Почему нет? Старая база мсскл в которой не включено обслуживание против свежесозданной постгре

Иван
Да вот я про это тоже

В принципе баш на баш на упр блокировках

без конфигов сервера и плана запроса ТОЛЬКО пальцем в небо. как пример нехватка work_mem приводит к сбросу на диск данных, что в зависимости от скорости диска может очень сильно замедлить выполнение. неверная статистика или цена random page cost может приводить к seq_scan и т.д.

Владимир
без конфигов сервера и плана запроса ТОЛЬКО пальце...

Или просто постгре неправильно подсчитал стоимость запроса и сделал нестлуп

Toast?

Владимир
без конфигов сервера и плана запроса ТОЛЬКО пальце...

> в зависимости от скорости диска В независимости. Если оно влезет в память -- оно будет в pagecache линукса, пусть этим данным и назначен файл. Если оно не влезет в память -- его выкинет в swap, хоть там work_mem и хватит. Разница в скорости доступа к дисковой структуре и структуре в памяти есть. Можэт, раза в два дажэ (почти всегда меньшэ). Но не надо думать, что с временными файлами на диске тут всё плохо (или с операцыями в памяти всегда всё хорошо).

для начала запрос в студию

19 17
для начала запрос в студию

И когда делался Analyze, reindex, vacuum full

Ilya Anfimov
> в зависимости от скорости диска В независимости...

я немного сумбурно описал то, с чем сталкивался, на ssd пока не подкрутил random_page_cost со стандартных значений в 4, индексы частенько не использовались. пока work_mem был низкий, соответствующие запросы судя по плану сбрасывали на диск.

λόγος- Автор вопроса
Sergey Makarov
Analyze делали?

Каждый божий день=)

λόγος- Автор вопроса
λόγος- Автор вопроса
Sergey Makarov
Почему нет? Старая база мсскл в которой не включен...

Прирост из-за более производительного железа

λόγος- Автор вопроса
19 17
для начала запрос в студию

Запрос: https://controlc.com/46893168

λόγος
Запрос: https://controlc.com/46893168

переписать на временные таблицы https://its.1c.ru/db/metod8dev#content:5842:hdoc:vtable_join

λόγος- Автор вопроса
19 17
переписать на временные таблицы https://its.1c.ru...

Если не сложно, просветите, почему так происходит? При использовании временной таблицы запрос одинаково быстро работает в PG и MSSQL

λόγος
Запрос: https://controlc.com/46893168

Поместить во временные таблицы срезы ну или попробовать вложить их во вложенные запросы

Sergey Makarov
Поместить во временные таблицы срезы ну или попроб...

вряд ли вложенные запросы улучшат ситуацию.

19 17
вряд ли вложенные запросы улучшат ситуацию.

Помогают. Проверено, но не всегда. Тут соединяется 8 таблиц. Постгре просто путается в плане соединения.

Sergey Makarov
Помогают. Проверено, но не всегда. Тут соединяется...

дак подзапросы так же хреново соединяются между собой. вообщем "резать к чертовой матери, не дожидаясь перитонита!"

19 17
дак подзапросы так же хреново соединяются между со...

В плане насколько я помню вначале пытается объединить вложенные

19 17
дак подзапросы так же хреново соединяются между со...

Дело в том, что в отличии от мсскл если запрос помещается во временную таблицу, то он всегда выполняется в один поток

Sergey Makarov
В плане насколько я помню вначале пытается объедин...

по той же ссылке https://its.1c.ru/db/metod8dev#content:5842:hdoc:subquery_join :) вообщем может и поможет, а может и нет. зачем рисковать?

19 17
чем хреновый?

Мы всегда читаем весь регистр сведений

Sergey Makarov
Мы всегда читаем весь регистр сведений

вы про рекомендацию избегать соединения подзапросов или про рефакторинг данного куска?

Sergey Makarov
Про рефакторинг

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

19 17
в данном случае нет фильтров по номенклатуре и не ...

Если запрос большой, то так не придумаешь и лучше полагаться на оптимизатор.

Sergey Makarov
Если запрос большой, то так не придумаешь и лучше ...

да, в любом случае надо от конкретной задачи исходить.

19 17
да, в любом случае надо от конкретной задачи исход...

Ага. В простом случае(работа до минуты отчёта) лучше временные однозначно.

Sergey Makarov
В плане насколько я помню вначале пытается объедин...

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

Sergey Makarov
А где это написано?

В документации и курсах, в dba-1 насколько я помню было

Владимир
Пг

Ниже сделал тест. Смотрите ) Подзапросы сохраняют порядок

19 17
одно исполнение не показатель.

12 подзапросы не разрушаются

Sergey Makarov
12 подзапросы не разрушаются

хорошо если так, но я бы не стал на это серьезно рассчитывать. 1) есть рекмоендация вендора так не делать 2) в будущем через 2-3-10 лет может смениться и поведение СУБД и вообще сама СУБД.

Sergey Makarov
Ниже сделал тест. Смотрите ) Подзапросы сохраняют ...

Это значит, что такой порядок оптимизатор устраивает

Владимир
Это значит, что такой порядок оптимизатор устраива...

В оракле вроде было правило, если найденный план не сильно лучше естественному (порядок записи в запросе) то применяется естественный

Sergey Makarov
Просто вспомнил )

лень же вам одну страницу прочитать https://postgrespro.ru/docs/postgresql/15/planner-optimizer

Владимир
лень же вам одну страницу прочитать https://postgr...

Читал. Нигде не нашел, что вложенные раскрываются

Sergey Makarov
Читал. Нигде не нашел, что вложенные раскрываются

сделайте неэффективный внутренний запрос и проверьте, у меня нет желания вам что-то доказывать. увидите что select t1 join (select t2 join t3) от select t1 join t2 join t3 ничем не отличается, если нет например агрегатных функций или группировок

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

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

здравствуйте, братья, кто-нибудь знает, как работать с Swift.com или Swift.net?
Ozzy
6
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Хмм... А на чем вы деплоите YOLO модели? Есть у кого-то опыт с ONNX (RT)?
Georgy Makarov
3
Объединять ячейки и графики строить обе умеют?
■_|ilya|_■
4
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Привет, подскажите, возможно ли как-то отловить, если кто-то тэгнул бота в группе с определенным сообщением? Использую: https://github.com/nerzh/telegram-vapor-bot
Alik Moldovanu
1
Карта сайта