Re: PATCH: hashjoin - gracefully increasing NTUP_PER_BUCKET instead of batching
От | Kevin Grittner |
---|---|
Тема | Re: PATCH: hashjoin - gracefully increasing NTUP_PER_BUCKET instead of batching |
Дата | |
Msg-id | 374360640.5196069.1418318945338.JavaMail.yahoo@jws10094.mail.ne1.yahoo.com обсуждение исходный текст |
Ответ на | Re: PATCH: hashjoin - gracefully increasing NTUP_PER_BUCKET instead of batching (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: PATCH: hashjoin - gracefully increasing NTUP_PER_BUCKET
instead of batching
|
Список | pgsql-hackers |
Robert Haas <robertmhaas@gmail.com> wrote: > On Sat, Dec 6, 2014 at 10:08 PM, Tomas Vondra <tv@fuzzy.cz> wrote: >> select a.i, b.i from a join b on (a.i = b.i); > > I think the concern is that the inner side might be something more > elaborate than a plain table scan, like an aggregate or join. I might > be all wet, but my impression is that you can make rescanning > arbitrarily expensive if you work at it. I'm not sure I'm following. Let's use a function to select from b: create or replace function fb() returns setof b language plpgsql rows 1 as $$ begin return query select i from b; end; $$; explain (analyze, buffers, verbose) select a.i, b.i from a join fb() b on (a.i = b.i); I used the low row estimate to cause the planner to put this on the inner side. 16 batches Execution time: 1638.582 ms Now let's make it slow. create or replace function fb() returns setof b language plpgsql rows 1 as $$ begin perform pg_sleep(2.0); return query select i from b; end; $$; explain (analyze, buffers, verbose) select a.i, b.i from a join fb() b on (a.i = b.i); 16 batches Execution time: 3633.859 ms Under what conditions do you see the inner side get loaded into the hash table multiple times? -- Kevin Grittner EDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
В списке pgsql-hackers по дате отправления: