Обсуждение: Dump/Restore performance improvement

Поиск
Список
Период
Сортировка

Dump/Restore performance improvement

От
Adi Alurkar
Дата:
Greetings,

I have observed that in a dump/restore scenario the longest time is
spent on index creation for larger tables, I have a suggestion of how
the performance could be improved thus reducing the time to recover
from a crash. Not sure if this is possible but would definitely be a
nice addition to the TODO list.

1) Add a new config paramter  e.g work_maintanence_max_mem  this will
the max memory postgresql *can* claim if need be.

2) During the dump phase of the DB  postgresql  estimates the
"work_maintenance_mem" that would be required to create the index in
memory(if possible) and add's a
SET work_maintenance_mem="the value calculated"  (IF this value is less
than work_maintanence_max_mem. )

3) During the restore phase the appropriate memory is allocated in RAM
and the index creation takes less time since PG does not have to sort
on disk.

--
Adi Alurkar (DBA sf.NET) <adi@vasoftware.com>
1024D/79730470 A491 5724 74DE 956D 06CB  D844 6DF1 B972 7973 0470


Re: Dump/Restore performance improvement

От
Tom Lane
Дата:
Adi Alurkar <adi@sf.net> writes:
> 1) Add a new config paramter  e.g work_maintanence_max_mem  this will
> the max memory postgresql *can* claim if need be.

> 2) During the dump phase of the DB  postgresql  estimates the
> "work_maintenance_mem" that would be required to create the index in
> memory(if possible) and add's a
> SET work_maintenance_mem="the value calculated"  (IF this value is less
> than work_maintanence_max_mem. )

This seems fairly pointless to me.  How is this different from just
setting maintenance_work_mem as large as you can stand before importing
the dump?

Making any decisions at dump time seems wrong to me in the first place;
pg_dump should not be expected to know what conditions the restore will
be run under.  I'm not sure that's what you're proposing, but I don't
see what the point is in practice.  It's already the case that
maintenance_work_mem is treated as the maximum memory you can use,
rather than what you will use even if you don't need it all.

            regards, tom lane