Отключить параллельный запрос Postgres для одного запроса Django - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть запрос, который мне нужен в моем приложении Django, который мне нужно было оптимизировать вручную.Но чтобы запрос выполнялся быстро, мне нужно сказать Postgres «не используйте параллелизм в этом».

Я думал, что это сработает:

from django.db import connection

cursor = connection.cursor()

# start a transaction so that PGBouncer runs the next statements
# on the same connection
cursor.execute("begin")

# turn off parallelism for this next query
cursor.execute("set max_parallel_workers_per_gather = 0")

# run my query
cursor.execute("HAND-TUNED SELECT QUERY GOES HERE")

# process the cursor results

# Put this connection back in the PGBouncer pool, and reset 
# max_parallel_workers_per_gather.
cursor.execute("rollback")

Но, похоже, это не работает.Мой запрос продолжает отображаться в моих журналах «медленных запросов», когда я запускаю его через сайт Django, и производительность остается низкой (4+ секунды с параллелизмом, 0,5 секунды без).

Есть ли способделать то, что мне нужно сделать?

1 Ответ

0 голосов
/ 15 февраля 2019

Во-первых, вы должны использовать SET LOCAL, чтобы эффект ограничивался транзакцией.

Затем я рекомендую вам использовать auto_explain, чтобы узнать фактический план, который былиспользуется для запроса.Возможно, причина замедления другая.

...