Re: Vacuum: allow usage of more than 1GB of work mem - Mailing list pgsql-hackers

From Robert Haas
Subject Re: Vacuum: allow usage of more than 1GB of work mem
Date
Msg-id CA+TgmoZ_RptgL8t3d_vHCkmySJ0e1K6pTEE6jJNuwuwBzZnuYQ@mail.gmail.com
Whole thread Raw
In response to Re: Vacuum: allow usage of more than 1GB of work mem  (Simon Riggs <simon@2ndquadrant.com>)
Responses Re: Vacuum: allow usage of more than 1GB of work mem
Re: Vacuum: allow usage of more than 1GB of work mem
List pgsql-hackers
On Tue, Sep 6, 2016 at 2:06 PM, Simon Riggs <simon@2ndquadrant.com> wrote:
> On 6 September 2016 at 19:00, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Robert Haas <robertmhaas@gmail.com> writes:
>>> Yeah, but I've seen actual breakage from exactly this issue on
>>> customer systems even with the 1GB limit, and when we start allowing
>>> 100GB it's going to get a whole lot worse.
>>
>> While it's not necessarily a bad idea to consider these things,
>> I think people are greatly overestimating the consequences of the
>> patch-as-proposed.  AFAICS, it does *not* let you tell VACUUM to
>> eat 100GB of workspace.  Note the line right in front of the one
>> being changed:
>>
>>          maxtuples = (vac_work_mem * 1024L) / sizeof(ItemPointerData);
>>          maxtuples = Min(maxtuples, INT_MAX);
>> -        maxtuples = Min(maxtuples, MaxAllocSize / sizeof(ItemPointerData));
>> +        maxtuples = Min(maxtuples, MaxAllocHugeSize / sizeof(ItemPointerData));
>>
>> Regardless of what vac_work_mem is, we aren't gonna let you have more
>> than INT_MAX ItemPointers, hence 12GB at the most.  So the worst-case
>> increase from the patch as given is 12X.  Maybe that's enough to cause
>> bad consequences on some systems, but it's not the sort of disaster
>> Robert posits above.
>
> Is there a reason we can't use repalloc here?

There are two possible problems, either of which is necessarily fatal:

1. I expect repalloc probably works by allocating the new space,
copying from old to new, and freeing the old.  That could work out
badly if we are nearly the edge of the system's allocation limit.

2. It's slower than the approach proposed upthread of allocating the
array in segments.  With that approach, we never need to memcpy()
anything.

On the plus side, it's probably less code.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Vacuum: allow usage of more than 1GB of work mem
Next
From: Robert Haas
Date:
Subject: Re: Vacuum: allow usage of more than 1GB of work mem