#postgresql
#postgresql
Вопрос:
Как указано в названии, я могу выполнить следующий запрос:
EXPLAIN ANALYZE SELECT * FROM accounts WHERE screen_name='realDonaldTrump';
и получить вывод:
Gather (cost=1000.00..87090.59 rows=1 width=122) (actual time=369.168..383.632 rows=1 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Parallel Seq Scan on accounts (cost=0.00..86090.49 rows=1 width=122) (actual time=312.741..326.849 rows=0 loops=3)
Filter: ((screen_name)::text = 'realDonaldTrump'::text)
Rows Removed by Filter: 1156140
Planning Time: 0.065 ms
Execution Time: 383.649 ms
Теперь мой вопрос в том, как я могу преобразовать этот запрос, чтобы использовать больше или использовать меньше рабочих? В Интернете я нашел некоторые параметры, подобные max_parallel_workers
, но я не могу включить их в запрос. Я запускаю этот запрос из pycharm -> postgresql console.
Редактировать: после выполнения запроса из комментария это вывод:
Gather (cost=1000.00..87090.59 rows=1 width=122) (actual time=348.717..403.839 rows=1 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Parallel Seq Scan on accounts (cost=0.00..86090.49 rows=1 width=122) (actual time=311.207..324.566 rows=0 loops=3)
Filter: ((screen_name)::text = 'realDonaldTrump'::text)
Rows Removed by Filter: 1156140
Planning Time: 0.563 ms
Execution Time: 403.856 ms
Редактировать 2:
После работы с файлом postgresql.conf и изменения значений max_parallel_workers_per_gather
и max_parallel_workers
, а затем перезапуска postgres, ничего не изменилось. Только позже, после того, как я запустил этот запрос:
SET max_parallel_workers_per_gather = 4;
Выполнялся ли первоначальный sql-запрос с запрошенными 4 рабочими.
Комментарии:
1. Почему бы вам не создать индекс на
screen_name
?2. Не внутри запроса. Вы либо устанавливаете его как параметр в сеансе, либо как параметр базы данных / всего кластера.
3. Я делаю школьную работу, и мы изучаем индексы.
4. Могу ли я получить подсказку о том, где я могу изменить эти настройки? Я изменил значение для paralel_workers в моей таблице учетных записей, используя pgAdmin, но запрос по-прежнему выполняется с 2 рабочими вместо указанного числа.
5. Если вы хотите узнать об индексах, создайте индекс и наблюдайте за результатами, а не проводите «атаку грубой силы» с большим количеством рабочих
Ответ №1:
Вы можете увеличить max_parallel_workers_per_gather
, или вы можете
ALTER TABLE accounts SET (parallel_workers = 6);
Комментарии:
1. Я понимаю sql-запрос, поскольку он прост, но когда я его запускаю, используемые рабочие (в запросе из вопроса) по-прежнему составляют только 2, а не 6. И я не могу найти
max_parallel_workers_per_gather
нигде в pgAdmin, или я должен искать в другом месте?2. Это
postgresql.conf
параметр конфигурации. Можете ли вы отредактировать вопрос и добавитьEXPLAIN (ANALYZE)
выходные данные для запроса после запускаALTER TABLE
?3. Отредактировал вопрос с выводом.