Thread: how to reach D5 in tuplesort.c 's polyphase merge algorithm?
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
);
id code article name department
31800 266 \N Machault 77
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
土卜皿 <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
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:That doesn't sound like enough data to force it to spill to disk at all;
> 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,
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
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:That doesn't sound like enough data to force it to spill to disk at all;
> 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,
at least not unless you turn down work_mem to some very small value.
hi, Tomthanks 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 initdbDillon