Re: PGSQL 9.3 - Materialized View - multithreading
От | Graeme B. Bell |
---|---|
Тема | Re: PGSQL 9.3 - Materialized View - multithreading |
Дата | |
Msg-id | 7A0C759C-AE7C-4097-94E3-27F14C20DA48@skogoglandskap.no обсуждение исходный текст |
Ответ на | PGSQL 9.3 - Materialized View - multithreading (Nicolas Paris <niparisco@gmail.com>) |
Ответы |
Re: PGSQL 9.3 - Materialized View - multithreading
|
Список | pgsql-performance |
On 04 Apr 2014, at 18:29, Nicolas Paris <niparisco@gmail.com> wrote: > Hello, > > My question is about multiprocess and materialized View. > http://www.postgresql.org/docs/9.3/static/sql-creatematerializedview.html > I (will) have something like 3600 materialised views, and I would like to know the way to refresh them in a multithreadway > (anderstand 8 cpu cores -> 8 refresh process in the same time) Hi Nick, out of DB solution: 1. Produce a text file which contains the 3600 refresh commands you want to run in parallel. You can do that with selectand format() if you don't have a list already. 2. I'm going to simulate your 3600 'refresh' commands here with some select and sleep statements that finish at unknown times. (In BASH): for i in {1..3600} ; do echo "echo \"select pg_sleep(1+random()::int*10); select $i\" | psql mydb" ; done > 3600commands 3. Install Gnu Parallel and type: parallel < 3600commands 4. Parallel will automatically work out the appropriate number of cores/threads for your CPUs, or you can control it manuallywith -j. It will also give you a live progress report if you use --progress. e.g. this command balances 8 jobs at a time, prints a dynamic progress report and dumps stdout to /dev/null parallel -j 8 --progress < 3600commands > /dev/null 5. If you want to make debugging easier use the parameter --tag to tag output for each command. Of course it would be much more elegant if someone implemented something like Gnu Parallel inside postgres or psql ... :-) Hope this helps & have a nice day, Graeme.
В списке pgsql-performance по дате отправления: