Re: Add the ability to limit the amount of memory that can be allocated to backends.
От | Reid Thompson |
---|---|
Тема | Re: Add the ability to limit the amount of memory that can be allocated to backends. |
Дата | |
Msg-id | f05c3d8aedc3fad650c15e2139cdd5e55683f0f5.camel@crunchydata.com обсуждение исходный текст |
Ответ на | Re: Add the ability to limit the amount of memory that can be allocated to backends. (Arne Roland <A.Roland@index.de>) |
Ответы |
Re: Add the ability to limit the amount of memory that can be allocated to backends.
|
Список | pgsql-hackers |
Hi Arne, On Mon, 2022-10-24 at 15:27 +0000, Arne Roland wrote: > Hello Reid, > > could you rebase the patch again? It doesn't apply currently > (http://cfbot.cputube.org/patch_40_3867.log). Thanks! rebased patches attached. > You mention, that you want to prevent the compiler from getting > cute.I don't think this comments are exactly helpful in the current > state. I think probably fine to just omit them. I attempted to follow previous convention when adding code and these comments have been consistently applied throughout backend_status.c where a volatile pointer is being used. > I don't understand the purpose of the result variable in > exceeds_max_total_bkend_mem. What purpose does it serve? > > I really like the simplicity of the suggestion here to prevent oom. If max_total_backend_memory is configured, exceeds_max_total_bkend_mem() will return true if an allocation request will push total backend memory allocated over the configured value. exceeds_max_total_bkend_mem() is implemented in the various allocators along the lines of ...snip... /* Do not exceed maximum allowed memory allocation */ if (exceeds_max_total_bkend_mem('new request size')) return NULL; ...snip... Do not allocate the memory requested, return NULL instead. PG already had code in place to handle NULL returns from allocation requests. The allocation code in aset.c, slab.c, generation.c, dsm_impl.c utilizes exceeds_max_total_bkend_mem() max_total_backend_memory (integer) Specifies a limit to the amount of memory (MB) that may be allocated to backends in total (i.e. this is not a per user or per backend limit). If unset, or set to 0 it is disabled. A backend request that would push the total over the limit will be denied with an out of memory error causing that backend's current query/transaction to fail. Due to the dynamic nature of memory allocations, this limit is not exact. If within 1.5MB of the limit and two backends request 1MB each at the same time both may be allocated, and exceed the limit. Further requests will not be allocated until dropping below the limit. Keep this in mind when setting this value. This limit does not affect auxiliary backend processes Auxiliary process . Backend memory allocations (backend_mem_allocated) are displayed in the pg_stat_activity view. > I intent to play around with a lot of backends, once I get a rebased > patch. > > Regards > Arne
Вложения
В списке pgsql-hackers по дате отправления: