Thread: trying to study how sorting works
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 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.
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.
Thanks.
--Hitesh
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
On Thu, Mar 26, 2015 at 10:44 PM, hitesh ramani <hiteshramani@hotmail.com> 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 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.
Jim has answered this already.
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.
In case of sort specifically, fire a query with an ORDER BY and break at ExecSort. Step through this function and its minions. Try range of sizes of results i.e. size of row * number of rows to understand the dynamics.
Thanks.--Hitesh
--
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company