The following patch implements a fairly light set of timing statements
aimed at understanding external sort performance. There is no attempt to
alter the algorithms.
Each major point in the algorithms is marked as shown in this example:
postgres=# set debug_sort=true;
SET
postgres=# explain analyze select * from test2 order by col1,col2;
NOTICE: tuplesort begin work_mem= 1024
NOTICE: +0 secs heap sort nkeys= 2
NOTICE: +0 secs switching to external sort
NOTICE: +1129 secs starting build of next run
NOTICE: +2229 secs run building complete nruns= 2
NOTICE: +2229 secs merging runs with 6 tapes
...
NOTICE: +3036 secs starting final merge
I'll add other information, as requested.
The "6 tapes" is currently hardcoded, though is included in expectation
of implementing variable numbers of tapes.
I'm not sure if I got the header file correct for full portability of
gettimeofday(). Please correct me, if this is the case.
Please post sort performance data back via this post.
Best Regards, Simon Riggs