|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
Здравствуйте. postgres 9.5. Необходимо оптимизировать выполнение запроса. проверил explain analyze : выяснилось что подавляющее время уходить на планирование запроса, а само время выполнение очень небольшое. сделал подготовленный запрос с помощью prepare . но сколько не выполняю explain execute (и одинаковые, и разные) - все равно используется частный план выполнения. Подскажите пожалуйста как заставить postgres 9.5 использовать общий план выполнения . миграция на postgres 12 не рассматривается ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 14:39 |
|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
psm666 Здравствуйте. postgres 9.5. Необходимо оптимизировать выполнение запроса. проверил explain analyze : выяснилось что подавляющее время уходить на планирование запроса, а само время выполнение очень небольшое. сделал подготовленный запрос с помощью prepare . но сколько не выполняю explain execute (и одинаковые, и разные) - все равно используется частный план выполнения. Подскажите пожалуйста как заставить postgres 9.5 использовать общий план выполнения . миграция на postgres 12 не рассматривается Никак... база сама решит как лучше. Но вообще не очень понятна постановка вопроса и зачем вам это надо вообще. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 19:26 |
|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
Нужно ускорить работу запроса. добавил в 9.5 опцию plan_cache_mode из 12-го . понял почему используется частный план вместо общего. частный план - время планирования 50мс, время выполнения - 2мс общий план - время выполнения 30мс . т.е. частный план действительно сильно быстрей. но даже при неоптимальном плане общий план оказываться быстрей в общем плане используется на одной из таблиц seq scan, а в частном index scan. подскажите, есть ли какой способ принудительно заставить использовать индекс для доступа к конкретно таблице ? может есть патчи добавляющее поддержку хинтов в postgres ( аналогично index из mssql ) ? может есть какой способ сильно уменьшить время расчета плана ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 09:41 |
|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
psm666 Нужно ускорить работу запроса. добавил в 9.5 опцию plan_cache_mode из 12-го . понял почему используется частный план вместо общего. частный план - время планирования 50мс, время выполнения - 2мс общий план - время выполнения 30мс . т.е. частный план действительно сильно быстрей. но даже при неоптимальном плане общий план оказываться быстрей в общем плане используется на одной из таблиц seq scan, а в частном index scan. подскажите, есть ли какой способ принудительно заставить использовать индекс для доступа к конкретно таблице ? может есть патчи добавляющее поддержку хинтов в postgres ( аналогично index из mssql ) ? может есть какой способ сильно уменьшить время расчета плана ? А чем тебя 50мс не устраивает? Сколько надо-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 09:48 |
|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
mefman А чем тебя 50мс не устраивает? Сколько надо-то? есть обращение извне по протоколу , данные тащатся очень не оптимально - по одному значению за раз, много запросов. переделать это возможности нет. переделываю структуру БД в результате вылезло что скорость вытаскивания данных увеличилась 2,5 раза. что заметят, и будут вопросы. нужно что бы скорость осталось хотя бы прежней - а это нужно уменьшить время выполнения запроса хотя бы до 20мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 09:57 |
|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
psm666 mefman А чем тебя 50мс не устраивает? Сколько надо-то? есть обращение извне по протоколу , данные тащатся очень не оптимально - по одному значению за раз, много запросов. переделать это возможности нет. переделываю структуру БД в результате вылезло что скорость вытаскивания данных увеличилась 2,5 раза. что заметят, и будут вопросы. нужно что бы скорость осталось хотя бы прежней - а это нужно уменьшить время выполнения запроса хотя бы до 20мс. Hm засунуть этот запрос в хранимку и пусть спланируется 1 раз вариант не подходит? PS: при использовании prepared запросов планирование вообще не должно занимать много времени. Так как оно 1 раз произведётся что для общего что для частного плана. Если у вас не так - надо вникать что у вас конкретно происходит с запросом и временами. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 10:00 |
|
как заставить postgres 9.5 использовать общий план выполнения
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 10:41 |
|
|
start [/forum/topic.php?fid=53&msg=40097219&tid=1993863]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 380ms |
0 / 0 |