172 похожих чатов

> Не вижу логики в этой формуле, если честно. Хорошо, как

правильно ограничить work_mem?

> Если к кому-то приходит OOMKiller, то этот кто-то не умеет настраивать OS под PostgreSQL, вот и всё.

Да, у нас не настроено это ещё и судя по топику админы не скоро его сделают... Вот такие вот дела.

16 ответов

26 просмотров

> Хорошо, как правильно ограничить work_mem? А с какой целью? Для оптимальной производительности — это одно дело, а для того, чтобы реже падало, несмотря на профессионализм "админов" — совсем другое. ;) Далее, настройка в любом случае зависит от вида нагрузки / используемых запросов — где-то work_mem не имеет значения (там, где "классический" OLTP, например), а где-то — очень важен.

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
> Хорошо, как правильно ограничить work_mem? А с ...

Да, поятно. В вашем ответе как всегда всё сложно. Нету простой объясняющей формулы. 😊 Я вас понимаю, зависит от нагрузки. Если предположим, что клиенты одноверемнно сделали самый неподходящий запрос, который использует work_mem для сортировки в одном statement-е (а может и не один раз), то видимо нужно примерно мою формулу брать.

Aleksey Stavrov
Да, поятно. В вашем ответе как всегда всё сложно. ...

Подождите. Вот это: TOTAL_MEMORY - effective_cache_size - maintenance_work_mem - OS_KERNEL_SIZE с учётом того, что (effective_cache_size = shared_memory + os cache), в норме должно давать примерно ноль, нет? Я потому и написал, что логики в этой формуле не вижу.

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
Подождите. Вот это: TOTAL_MEMORY - effective_cache...

ну я примерно оценил, что если в os_cache будет столько-то GB постоянно (не важно, сколько клиентов и какие запросы сейчас делают), то efffective_cache_size будет такой. Понятно, что, когда клиентов меньше, общий кеш будет сильно больше. Т.е. если придёт maximum клинтов, то они не должны съесть больше чем столько-то GB памяти, а значит в os_cache останется вот это минимальное количество.

Aleksey Stavrov
ну я примерно оценил, что если в os_cache будет ст...

> ну я примерно оценил, что если в os_cache будет столько-то GB постоянно Хмм... сколько-то? Потому что я читаю то, что написано, а на самом деле в OS cache в норме попадает почти вся остающаяся RAM. Если Вы используете какие-то свои определения, хоть написали бы об этом. ;)

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
Подождите. Вот это: TOTAL_MEMORY - effective_cache...

Звучит так, что effective_cache_size рассчитывается без учёта work_mem*max_connections*coefficient

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
> ну я примерно оценил, что если в os_cache будет ...

У меня мысли были такие при расчете всех параметров: Выбираем shared_memory, max_connections, а остальные параметры меняются со временем. Точные значения не получить. Сделал примерно следующее: Сказал, что пусть минимум os_cache будет столько же, сколько shared_memory, т.е. shared_mem = os_cache=memory/2 Остальное отдаю под maintenance_work_mem и work_mem*max_connections. Когда коннекций максимальное число, то shared_memry=os_cache и в сумме половину памяти, когда коннекций мало, то os_cache больше. Как правильно надо мыслить?)

Aleksey Stavrov
У меня мысли были такие при расчете всех параметро...

Что-то тут не так с формулами. Потому что вот это: shared_mem = os_cache=memory/2 (если memory = RAM) означает, что остаток = 0, нет? И да, зачем Вам такой минимальный os_cache в принципе? > Остальное отдаю под maintenance_work_mem И по какой причине Вы его считаете один раз? > и work_mem*max_connections. Опять-таки, почему? Это же не худший случай. И да, раз Вы всё равно занимаетесь "шаманством", почему бы не поставить любой work_mem (например, тот, с которым "типичные" запросы, где он нужен, работают хорошо), а потом с каждым очередным падением сервера PostgreSQL уменьшать его? ;)

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
Что-то тут не так с формулами. Потому что вот это...

Ошибся, shared_memory=os_cache=memory/4. Да, maintenance_work_mem нужно умножать на autovacuum_max_workers. И work_mem*max_connections*coefficient должен о быть. Но у нас в реальности каждый запрос не использует work_mem, поэтому я, возможно грубо, оценил coefficient = 1. > а потом с каждым очередным падением сервера PostgreSQL уменьшать его? Так правда делают?)

Aleksey Stavrov
Ошибся, shared_memory=os_cache=memory/4. Да, main...

> поэтому я, возможно грубо, оценил coefficient = 1 Тогда, если я правильно понял, это "сойдёт" (хотя почти наверняка в реальности можно было бы поставить [существенно} больше, см. ниже). > Так правда делают?) (Ехидно) Вы будете, почти наверняка — точнее "оцените" то, что реально будет на месте max_connections и coefficient. Ну или существенная часть RAM будет почти что простаивать. И так можно легко проиграть в производительности раза в 3 и более — но на что только не пойдёшь, лишь правильно не настраивать OS, правда? ;) Кроме шуток — неужели нельзя решить этот вопрос с "админами"?

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
Что-то тут не так с формулами. Потому что вот это...

На счёт того, зачем мне такой минимальный os_cache нужен, не могу найти ответа достойного. Ощущение, что непонимаю, что нужно в effective_cache_size поставить

Aleksey Stavrov
На счёт того, зачем мне такой минимальный os_cache...

Я к тому, что на кеш OS postgres полагается мало для каких целей, т.е. отдать эту RAM в shared_buffers почти всегда эффективнее.

Aleksey-Stavrov Автор вопроса
Yaroslav Schekin
Я к тому, что на кеш OS postgres полагается мало д...

Ага, спасибо. Тогда как правильно выставлять это значение (effective_cache_size)?) Просто эта настройка влияет в моём случае на использование индекса очень сильно и как оценить os_cache совершенно непонятно.

Aleksey Stavrov
Ага, спасибо. Тогда как правильно выставлять это з...

А он всё равно не очень точно учитывается, к счастью, так что и выставлять его можно довольно грубо. :) Т.е. его можно завышать (ставить хоть равным RAM), и от этого будет только лучше, скорее всего.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта