Re: updated SORT/LIMIT patch - Mailing list pgsql-patches

From Gregory Stark
Subject Re: updated SORT/LIMIT patch
Date
Msg-id 87zm4kh28t.fsf@oxford.xeocode.com
Whole thread Raw
In response to Re: updated SORT/LIMIT patch  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: updated SORT/LIMIT patch
List pgsql-patches
"Tom Lane" <tgl@sss.pgh.pa.us> writes:

> Gregory Stark <stark@enterprisedb.com> writes:
>> What does the executor do differently in the case of a subplan with a
>> parameter that makes it re-execute the plan from scratch and not just do a
>> simple rescan?
>
> Look at the chgParam signaling.  Since a Sort node itself has no
> parameters, it historically has only had to re-sort if its input node
> suffers a parameter change, which it checks in ExecReScanSort.  But now
> the bound effectively acts like a parameter, and has to force a
> recomputation.

Hm, that all makes sense now. But then there's something mysterious going on
still as the regression test I tried to write for this actually does work:

edb=# select (select ROW(int_array_aggregate(empno::integer),min(sal),round(avg(sal)),max(sal)) as sal from (select *
fromemp order by sal offset 3*bucket limit 3) as x) from generate_series(0,(select count(*) from emp)/3) as bucket; 
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  switching to bounded heap sort at 7 tuples
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing unheapify of 3 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 17 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  switching to bounded heap sort at 13 tuples
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing unheapify of 6 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 17 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing qsort of 14 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 18 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing qsort of 14 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 18 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing qsort of 14 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 18 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
                 ?column?
-------------------------------------------
 ("{7369,7900,7876}",800.00,950,1100.00)
 ("{7654,7521,7934}",1250.00,1267,1300.00)
 ("{7844,7499,7782}",1500.00,1850,2450.00)
 ("{7698,7566,7902}",2850.00,2942,3000.00)
 ("{7788,7839}",3000.00,4000,5000.00)
(5 rows)

--
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com


pgsql-patches by date:

Previous
From: "Jie Zhang"
Date:
Subject: Re: Updated bitmap index patch
Next
From: Tom Lane
Date:
Subject: Re: updated SORT/LIMIT patch