Как установить количество рабочих в postgresql select?

#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. Отредактировал вопрос с выводом.