Thread: how to reach D5 in tuplesort.c 's polyphase merge algorithm?

how to reach D5 in tuplesort.c 's polyphase merge algorithm?

From
土卜皿
Date:
hi, all
  for studying polyphase merge algorithm of tuplesort.c, I use ddd and apend a table, which has a schema as follows:

CREATE TABLE Towns (
   id SERIAL UNIQUE NOT NULL,
   code VARCHAR(10) NOT NULL, -- Only unique inside a department
   article TEXT,
   name TEXT NOT NULL, -- Names are not really unique, for instance 'Sainte-Croix'
   department VARCHAR(4) NOT NULL REFERENCES Departments (code),
   UNIQUE (code, department)
   -- UNIQUE (name, department) -- Not perfectly unique but almost
  );

and has 36684 records, and every record is like:
id          code  article  name      department
31800    266    \N    Machault    77

and for getting into external sort, I type the following command:

select * from towns order by name desc;

but I found it need not reach D5 and D6 during sorting,  I thought that the reason is the amount of runs is 3 (too small) before merging, for generate more runs, I shuffled the records
when inputting them and got the same result.

so that I want some help, what schema and records do I as least need for reaching D5 and D6?  any advice will be appreciated!

BEST REGAERDS
Dillon

Re: how to reach D5 in tuplesort.c 's polyphase merge algorithm?

From
Tom Lane
Date:
土卜皿 <pengcz.nwpu@gmail.com> writes:
>   for studying polyphase merge algorithm of tuplesort.c, I use ddd and
> apend a table, which has a schema as follows:
> ...
> and has 36684 records, and every record is like:
> id          code  article  name      department
> 31800    266    \N    Machault    77

> and for getting into external sort, I type the following command:

> select * from towns order by name desc;

> but I found it need not reach D5 and D6 during sorting,

That doesn't sound like enough data to force it to spill to disk at all;
at least not unless you turn down work_mem to some very small value.
        regards, tom lane



Re: how to reach D5 in tuplesort.c 's polyphase merge algorithm?

From
土卜皿
Date:

2014-07-19 6:26 GMT+08:00 Tom Lane <tgl@sss.pgh.pa.us>:
土卜皿 <pengcz.nwpu@gmail.com> writes:
>   for studying polyphase merge algorithm of tuplesort.c, I use ddd and
> apend a table, which has a schema as follows:
> ...
> and has 36684 records, and every record is like:
> id          code  article  name      department
> 31800    266    \N    Machault    77

> and for getting into external sort, I type the following command:

> select * from towns order by name desc;

> but I found it need not reach D5 and D6 during sorting,

That doesn't sound like enough data to force it to spill to disk at all;
at least not unless you turn down work_mem to some very small value.

 
hi, Tom
  thanks a lot!

                 
work_mem you said remind me one more thing I did, I tried to change BLCKSZ = 8192/2, and successfully compiled, but I got a error when executing initdb

Dillon

Re: how to reach D5 in tuplesort.c 's polyphase merge algorithm?

From
土卜皿
Date:
hi,
   I got the same result after work_mem = 64,
but I can get to D5 and D6 after using bigger data sample (at least 100000 records) as Tom said!




2014-07-19 6:35 GMT+08:00 土卜皿 <pengcz.nwpu@gmail.com>:

2014-07-19 6:26 GMT+08:00 Tom Lane <tgl@sss.pgh.pa.us>:

土卜皿 <pengcz.nwpu@gmail.com> writes:
>   for studying polyphase merge algorithm of tuplesort.c, I use ddd and
> apend a table, which has a schema as follows:
> ...
> and has 36684 records, and every record is like:
> id          code  article  name      department
> 31800    266    \N    Machault    77

> and for getting into external sort, I type the following command:

> select * from towns order by name desc;

> but I found it need not reach D5 and D6 during sorting,

That doesn't sound like enough data to force it to spill to disk at all;
at least not unless you turn down work_mem to some very small value.

 
hi, Tom
  thanks a lot!

                 
work_mem you said remind me one more thing I did, I tried to change BLCKSZ = 8192/2, and successfully compiled, but I got a error when executing initdb

Dillon