On 3/26/15 12:14 PM, hitesh ramani wrote:
Hello devs,
I'm trying to understand how sorting exactly works in Postgres, I've
understood that there are two sorting mechanisms depending on the size
of the data, one being qsort which is initiated if workmem is < 1024 kb
That's incorrect. What happens is we absorb tuples in memory until we
would exceed work_mem. At that point the sort switches to a tapesort.
and the other being external sort which is initiated in the other case.
I tried to find out more material to understand how it exactly works but
I'm unable to find any help material.
Take a look at utils/sort/tuplesort.c and executor/nodeSort.c (both
under src/backend).
Moreover, I'm trying to study the code using gdb by attaching it to the
pg_backend_pid and having a breakpoint at raw_parser, from where I start
analyzing. Any help material or resources would be really appreciated.
FWIW, I typically set a breakpoint at exec_simple_query when I want to
do that, and skip over functions until either
pg_analyze_and_rewrite->parse_analyze->transformTopLevelStmt or
PortalRun. The first case is useful if you're dealing with something
that's going to get handled entirely during query analysis, such as
casting a constant or utility commands. PortalRun is what you want when
there will be some kind of output, including DML.
--
Jim Nasby, Data Architect, Blue Treble Consulting
Data in Trouble? Get it in Treble! http://BlueTreble.com
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers