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

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

55 ответов

119 просмотров

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

Не оптимальный. Упирается если разница в разы, а тут 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 ничем не отличается, если нет например агрегатных функций или группировок

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

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

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
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
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта