Re: [HACKERS] Block level parallel vacuum
| От | Andres Freund | 
|---|---|
| Тема | Re: [HACKERS] Block level parallel vacuum | 
| Дата | |
| Msg-id | 20200121060020.e3cr7s7fj5rw4lok@alap3.anarazel.de обсуждение исходный текст  | 
		
| Ответ на | Re: [HACKERS] Block level parallel vacuum (Amit Kapila <amit.kapila16@gmail.com>) | 
| Ответы | 
                	
            		Re: [HACKERS] Block level parallel vacuum
            		
            		 | 
		
| Список | pgsql-hackers | 
Hi,
On 2020-01-20 09:09:35 +0530, Amit Kapila wrote:
> Pushed, after fixing these two comments.
When attempting to vacuum a large table I just got:
postgres=# vacuum FREEZE ;
ERROR:  invalid memory alloc request size 1073741828
#0  palloc (size=1073741828) at /mnt/tools/src/postgresql/src/backend/utils/mmgr/mcxt.c:959
#1  0x000056452cc45cac in lazy_space_alloc (vacrelstats=0x56452e5ab0e8, vacrelstats=0x56452e5ab0e8,
relblocks=24686152)
    at /mnt/tools/src/postgresql/src/backend/access/heap/vacuumlazy.c:2741
#2  lazy_scan_heap (aggressive=true, nindexes=1, Irel=0x56452e5ab1c8, vacrelstats=<optimized out>,
params=0x7ffdf8c00290,onerel=<optimized out>)
 
    at /mnt/tools/src/postgresql/src/backend/access/heap/vacuumlazy.c:786
#3  heap_vacuum_rel (onerel=<optimized out>, params=0x7ffdf8c00290, bstrategy=<optimized out>)
    at /mnt/tools/src/postgresql/src/backend/access/heap/vacuumlazy.c:472
#4  0x000056452cd8b42c in table_relation_vacuum (bstrategy=<optimized out>, params=0x7ffdf8c00290, rel=0x7fbcdff1e248)
    at /mnt/tools/src/postgresql/src/include/access/tableam.h:1450
#5  vacuum_rel (relid=16454, relation=<optimized out>, params=params@entry=0x7ffdf8c00290) at
/mnt/tools/src/postgresql/src/backend/commands/vacuum.c:1882
Looks to me that the calculation moved into compute_max_dead_tuples()
continues to use use an allocation ceiling
        maxtuples = Min(maxtuples, MaxAllocSize / sizeof(ItemPointerData));
but the actual allocation now is
#define SizeOfLVDeadTuples(cnt) \
        add_size((offsetof(LVDeadTuples, itemptrs)), \
                 mul_size(sizeof(ItemPointerData), cnt))
i.e. the overhead of offsetof(LVDeadTuples, itemptrs) is not taken into
account.
Regards,
Andres
		
	В списке pgsql-hackers по дате отправления: