Understanding sort's memory/disk usage

Started by Adam Richover 16 years ago2 messagesgeneral
Jump to latest
#1Adam Rich
adam.r@sbcglobal.net

Hello,
Please reference these explain plans. This is Pg 8.4.1

http://explain-analyze.info/query_plans/4032-query-plan-2745
http://explain-analyze.info/query_plans/4033-query-plan-2746

First, could somebody explain what is leading the first query to choose
a different plan that's much slower? In the first plan only, this
expression is in the select & group by:

s.store_num || ' - ' || s.title

These are both non-null varchar fields. Both have a unique index.

Second, why would it choose to sort on disk for what appears to be ~32MB
of data, when my work_mem and temp_buffers are both 64 MB each?

If I increase work_mem and temp_buffers to 128 MB, I get a faster plan:

http://explain-analyze.info/query_plans/4034-query-plan-2747

But it's only reporting 92kb of memory used? Why don't I see numbers
between 64 MB and 128 MB for both the on-disk and in-memory plans?

Thanks,
Adam

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Adam Rich (#1)
Re: Understanding sort's memory/disk usage

Adam Rich <adam.r@sbcglobal.net> writes:

Please reference these explain plans. This is Pg 8.4.1

http://explain-analyze.info/query_plans/4032-query-plan-2745
http://explain-analyze.info/query_plans/4033-query-plan-2746

First, could somebody explain what is leading the first query to choose
a different plan that's much slower?

I think it's rejecting the HashAggregate plan because, with the
estimated-wider rows, the hash table is estimated to exceed work_mem.

Second, why would it choose to sort on disk for what appears to be ~32MB
of data, when my work_mem and temp_buffers are both 64 MB each?

The on-disk representation is more compact for various reasons.

But it's only reporting 92kb of memory used? Why don't I see numbers
between 64 MB and 128 MB for both the on-disk and in-memory plans?

You're not taking into account whether the sort is on pre-aggregation or
post-aggregation data.

regards, tom lane