Обсуждение: trying to study how sorting works

Поиск
Список
Период
Сортировка

trying to study how sorting works

От
hitesh ramani
Дата:
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

Re: trying to study how sorting works

От
Jim Nasby
Дата:
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



Re: trying to study how sorting works

От
Ashutosh Bapat
Дата:


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