Re: Removed extra memory allocations from create_list_bounds

Поиск
Список
Период
Сортировка
От Zhihong Yu
Тема Re: Removed extra memory allocations from create_list_bounds
Дата
Msg-id CALNJ-vS4g3QNmPe8WcgBmJQOzS0K_OAujW_1T0J2JXqpBQoBFw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Removed extra memory allocations from create_list_bounds  (Justin Pryzby <pryzby@telsasoft.com>)
Ответы Re: Removed extra memory allocations from create_list_bounds
Список pgsql-hackers


On Sun, May 16, 2021 at 10:00 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
On Sat, May 15, 2021 at 02:40:45PM +0530, Nitin Jadhav wrote:
> While working on [1], I observed that extra memory is allocated in
> [1] https://mail.google.com/mail/u/2/#search/multi+column+list/KtbxLxgZZTjRxNrBWvmHzDTHXCHLssSprg?compose=CllgCHrjDqKgWCBNMmLqhzKhmrvHhSRlRVZxPCVcLkLmFQwrccpTpqLNgbWqKkTkTFCHMtZjWnV

This is a link to your gmail, not to anything public.

If it's worth counting list elements in advance, then you can also allocate the
PartitionListValue as a single chunk, rather than palloc in a loop.
This may help large partition heirarchies.

And the same thing in create_hash_bounds with hbounds.

create_range_bounds() already doesn't call palloc in a loop.  However, then
there's an asymmetry in create_range_bounds, which is still takes a
double-indirect pointer.

I'm not able to detect that this is saving more than about ~1% less RAM, to
create or select from 1000 partitions, probably because other data structures
are using much more, and savings here are relatively small.

I'm going to add to the next CF.  You can add yourself as an author, and watch
that the patch passes tests in cfbot.
https://commitfest.postgresql.org/
http://cfbot.cputube.org/

Thanks,
--
Justin
Hi,
For 0001-Removed-extra-memory-allocations-from-create_list_bo.patch :

+static int
+get_non_null_count_list_bounds(PartitionBoundSpec **boundspecs, int nparts)

Since the function returns the total number of non null bound values, should it be named get_non_null_list_bounds_count ?
It can also be named get_count_of_... but that's longer.

+   all_values = (PartitionListValue **)
+       palloc(ndatums * sizeof(PartitionListValue *));

The palloc() call would take place even if ndatums is 0. I think in that case, palloc() doesn't need to be called.

Cheers

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Query about time zone patterns in to_char
Следующее
От: Nitin Jadhav
Дата:
Сообщение: Re: Query about time zone patterns in to_char