Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как заставить postgres 9.5 использовать общий план выполнения / 7 сообщений из 7, страница 1 из 1
13.09.2021, 14:39
    #40097219
psm666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
Здравствуйте.

postgres 9.5.
Необходимо оптимизировать выполнение запроса.

проверил explain analyze : выяснилось что подавляющее время уходить на планирование запроса, а само время выполнение очень небольшое.

сделал подготовленный запрос с помощью prepare .
но сколько не выполняю explain execute (и одинаковые, и разные) - все равно используется частный план выполнения.

Подскажите пожалуйста как заставить postgres 9.5 использовать общий план выполнения .

миграция на postgres 12 не рассматривается
...
Рейтинг: 0 / 0
13.09.2021, 19:26
    #40097348
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
psm666
Здравствуйте.

postgres 9.5.
Необходимо оптимизировать выполнение запроса.

проверил explain analyze : выяснилось что подавляющее время уходить на планирование запроса, а само время выполнение очень небольшое.

сделал подготовленный запрос с помощью prepare .
но сколько не выполняю explain execute (и одинаковые, и разные) - все равно используется частный план выполнения.

Подскажите пожалуйста как заставить postgres 9.5 использовать общий план выполнения .

миграция на postgres 12 не рассматривается


Никак... база сама решит как лучше.
Но вообще не очень понятна постановка вопроса и зачем вам это надо вообще.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
14.09.2021, 09:41
    #40097467
psm666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
Нужно ускорить работу запроса.

добавил в 9.5 опцию plan_cache_mode из 12-го .

понял почему используется частный план вместо общего.

частный план - время планирования 50мс, время выполнения - 2мс
общий план - время выполнения 30мс .

т.е. частный план действительно сильно быстрей. но даже при неоптимальном плане общий план оказываться быстрей

в общем плане используется на одной из таблиц seq scan, а в частном index scan.

подскажите, есть ли какой способ принудительно заставить использовать индекс для доступа к конкретно таблице ?
может есть патчи добавляющее поддержку хинтов в postgres ( аналогично index из mssql ) ?
может есть какой способ сильно уменьшить время расчета плана ?
...
Рейтинг: 0 / 0
14.09.2021, 09:48
    #40097474
mefman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
psm666
Нужно ускорить работу запроса.

добавил в 9.5 опцию plan_cache_mode из 12-го .

понял почему используется частный план вместо общего.

частный план - время планирования 50мс, время выполнения - 2мс
общий план - время выполнения 30мс .

т.е. частный план действительно сильно быстрей. но даже при неоптимальном плане общий план оказываться быстрей

в общем плане используется на одной из таблиц seq scan, а в частном index scan.

подскажите, есть ли какой способ принудительно заставить использовать индекс для доступа к конкретно таблице ?
может есть патчи добавляющее поддержку хинтов в postgres ( аналогично index из mssql ) ?
может есть какой способ сильно уменьшить время расчета плана ?

А чем тебя 50мс не устраивает? Сколько надо-то?
...
Рейтинг: 0 / 0
14.09.2021, 09:57
    #40097477
psm666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
mefman

А чем тебя 50мс не устраивает? Сколько надо-то?

есть обращение извне по протоколу , данные тащатся очень не оптимально - по одному значению за раз, много запросов. переделать это возможности нет.
переделываю структуру БД в результате вылезло что скорость вытаскивания данных увеличилась 2,5 раза. что заметят, и будут вопросы.
нужно что бы скорость осталось хотя бы прежней - а это нужно уменьшить время выполнения запроса хотя бы до 20мс.
...
Рейтинг: 0 / 0
14.09.2021, 10:00
    #40097479
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
psm666
mefman

А чем тебя 50мс не устраивает? Сколько надо-то?

есть обращение извне по протоколу , данные тащатся очень не оптимально - по одному значению за раз, много запросов. переделать это возможности нет.
переделываю структуру БД в результате вылезло что скорость вытаскивания данных увеличилась 2,5 раза. что заметят, и будут вопросы.
нужно что бы скорость осталось хотя бы прежней - а это нужно уменьшить время выполнения запроса хотя бы до 20мс.


Hm засунуть этот запрос в хранимку и пусть спланируется 1 раз вариант не подходит?

PS: при использовании prepared запросов планирование вообще не должно занимать много времени.
Так как оно 1 раз произведётся что для общего что для частного плана.
Если у вас не так - надо вникать что у вас конкретно происходит с запросом и временами.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
14.09.2021, 10:41
    #40097497
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как заставить postgres 9.5 использовать общий план выполнения
Maxim Boguk
при использовании prepared запросов планирование вообще не должно занимать много времени.
Так как оно 1 раз произведётся что для общего что для частного плана.

Ну, нет.
Опуская скучные подробности откуда сюда пришли, интересующее место здесь: https://github.com/postgres/postgres/blob/REL_13_STABLE/src/backend/utils/cache/plancache.c#L1017 (для 9.5 там же) плюс сам GetCachedPlan чуть ниже
откуда можно узнать, что в нормальных условиях на каждый из 5 первых execute запрос будет планироваться заново с custom планом, затем будет сгенерирован generic план, на последующих вызовах будем выбирать, какой из планов получился дешевле: generic или среднее среди custom планов. custom план - это планируем запрос заново с нуля. В pg_stat_statements начиная с pg13 будет видно как разница plans и calls
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как заставить postgres 9.5 использовать общий план выполнения / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]