|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Здравствуйте. Помогите разобраться в SHMMAX и SHMALL + их связка с PostgreSQL. Мой стенд - виртуальная машина с xubuntu, выделено 1ГБ ОЗУ, PostgreSQL 10. Подскажите, правильно ли понимаю, что (мои суждения основаны на найденных в интернете материалах): SHMMAX – это максимальный объем общей памяти, который может быть выделен процессу для его работы, измеряется в байтах согласно lsipc? SHMALL – это общая разделяемая память, доступная для всех процессов, измеряется в блоках размером SHMMNI? Каждый из процессов может съесть из памяти максимум SHMMAX, но (кол-во процессов умножить на использованное в каждом процессе SHMMAX) не должно быть больше SHMALL? То есть, эти параметры не обязательно должны быть одинаковы? либо равны, либо SHMALL больше SHMMAX? А теперь вопросы по связке с PostgreSQL: Если всё вышеописанное - правильно, тогда параметр PostgreSQL shared_buffers должен «отъедать» SHMALL? То есть, если запустить lsipc, зафиксировать значение в колонке USED, затем стартануть сервер PostgreSQL (например, shared_buffers установлен в 128кБ, 32 сегмента по 4096 байт), после этого снова запустить lsipc – значение USED должно поменяться на +32? Значение SHMMAX необходимо устанавливать больше, чем shared_buffers? Почему в моей ВМке, на которой установлен только PostgreSQL, других программы (почти) нет, при выделении под SHMALL 2000 страниц, половина из них уже занята? Перезагружал ОС, PostgreSQL не запущен, а половина SHMALL занята. Информации прочитал много, но правильная картинка в голове пока не сложилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 12:30 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
SHMMAX - максимальный размер одного сегмента разделяемой памяти. SHMALL - максимальный суммарный размер всех сегментов разделяемой памяти. SHMALL должно быть равно или больше SHMMAX. Не скажу за Linux, но обычно это просто лимиты и можно использовать любые их разумные значения (значения, превышающие общий объём памяти в системе, предполагаю неразумными). Разделяемая память не учитывается при обработке лимитов выделения памяти (если таковые установлены), она является по определению общей для нескольких процессов. Любой процесс потребит столько памяти, сколько сможет, уперевшись, в итоге, в явно или неявно (общий объём доступной памяти) установленный лимит, далее он получит ошибку и завершится аварийно; бесконтрольно потребляющий память процесс может привести к пейджингу, своппингу, а, в случае Linux, - к срабатыванию OOM. Вышеописанное относится к т.н. "System V IPC". Постгрес с некоторых пор стараниями альтернативномыслящих почти не использует SYSV IPC, а использует POSIX IPC, к которому описанные выше настройки не применимы. Если у Вас что-то наблюдается в выводе lsipc, покажите вывод. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 13:19 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Про SHMMAX и SHMALL понятно, спасибо. Про SYSV IPC и POSIX IPC - пока не понятно, буду читать. Вывод lsipc был такой, как на скриншоте ДО старта PostgreSQL (с установленным shared_buffers в 1024 МБ), так и после старта сервера: ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 13:49 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Ну кто-то ещё испорльзует... lsipc -m ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 13:52 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
PostgreSQL запущен от пользователя postgres. Вывод отображаю не весь, так как остальные строки - это разные вариации xfce. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 14:23 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Насчёт xfce не скажу, а постгрес всё правильно съел - несколько байт. Так и должно нонче быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 16:23 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
xfce пусть ест, сколько ест. А вот почему по PostgreSQL: почему так и должно быть, что в сегменте PostgreSQL занимает всего 40 байт? С помощью расширения pg_prewarm загнал большую таблицу в кэш PostgreSQL (таблица весом 500 МБ). Но вывод lsipc -m не изменился. Получается, операционная система не отображает те сегменты, который выделила под shared_buffers постгреса? В linux новичок, пока со средства мониторинга ресурсов ОС не знаком. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 16:49 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
У вас используется параметр: Код: plsql 1.
Следовательно SYSV IPC не используется.Поэтому вы 40 байт видите. Если хотите поиграться с SYSV IPC, ставьте Код: plsql 1.
И перезапустите Postgresql. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 17:27 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Ну так гуглите "System V IPC" и "POSIX IPC". Это технически очень разные механизмы для решения похожих задач. Просто в документации постгреса по инерции всё пишут и пишут про настройку SYSV IPC, хотя она не требуется со времён 9.3. Сейчас есть невразумительная оговорка: https://www.postgresql.org/docs/12/kernel-resources.html Prior to PostgreSQL 9.3, only System V shared memory was used, so the amount of System V shared memory required to start the server was much larger. If you are running an older version of the server, please consult the documentation for your server version. При этом shared_memory_type=sysv де-факто не работает нигде в версиях с 9.3 и до 11.x включительно (ну если не патчить специально). https://github.com/postgres/postgres/blob/REL_12_STABLE/src/backend/port/sysv_shmem.c Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 17:32 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
BigBudda, Да, есть такой параметр, поменял, перезапустил. В lsipc -m появилась вторая строка с postgres, поле SIZE упорно показывает в размере 1,7К. Сервер PostgreSQL нагружаю, а эти 1.7К не меняются. Scott Tiger, Уже гуглю. Видимо, пока не разберусь с разницей в System V IPC и POSIX IPC (и с тем, что это вообще такое), не пойму как влияют описанные мною параметры и где прячутся сегменты, занимаемые shared_buffers. В общем, читаю. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 18:18 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
ptolmachev, IPC - это Inter-Process Communication, набор средств (API, компоненты ядра, утилиты) для организации взаимодействия процессов, обычно - в многопроцессном по архитектуре ПО (постгрес, оракл - самые характерные примеры такого ПО). В *nix-подобных ОС есть несколько вариантов реализации такого взаимодействия, в частности, System V IPC родом из 80-х, и POSIX IPC. Разные механизмы используют разные утилиты для отображения информации, в частности, разделяемая память, полученная через API POSIX IPC, в выводе lsipc (и подобных утилит в других ОС) не отображается. Ваш shared_buffers живёт в выводе pmap. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 20:35 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Scott Tiger, Да, наконец-то нашел shared_buffers в выводе pmap, спасибо! Про posix и sysv еще читаю, пока не разобрался, в процессе. Но не могу не задать еще один вопрос: Вы писали (в первом ответе к моему вопросу): Scott TigerВышеописанное относится к т.н. "System V IPC". Постгрес с некоторых пор стараниями альтернативномыслящих почти не использует SYSV IPC, а использует POSIX IPC, к которому описанные выше настройки не применимы И в комментарии на хабре находил информацию о том, что с версий PG 9.3+ shmmax и shmall стали бесполезными параметрами. Однако, если в shmall установить маленькое значение (например, 20), то PostgreSQL не стартанет. В сообщении об ошибке говорится о функции shmget. Значит, при выделении памяти ОС использует sysv, а PostgreSQL в своей работе - posix? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 23:28 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Нет. Я давал выше ссылку http://rhaas.blogspot.com/2012/06/absurd-shared-memory-limits.html , там как раз написано, что в таком случае очень маленький сегментик SYSV разделяемой памяти используется, 40-50 байт (платформоспецифичное значение). Поэтому, если скртить shmall до 20 байт, постгрес запуститься не сможет. Вся история эта была затеяна ради тех, кто параметры IPC настроить не может вообще, а с дефолтными значениями у них постгрес не запускается. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 09:02 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Scott Tiger, СПАСИБО!!! Всё понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 09:40 |
|
Какая связь между SHMMAX, SHMALL и PostgreSQL?
|
|||
---|---|---|---|
#18+
Закрывая эту тему, выложу тут ссылку на pgday: Модели разделяемой памяти в PostgreSQL Там презентация, в которой как раз описывается то, что я понять не мог, когда вопрос свой задавал. Посмотрев презентацию, многое станет понятно про sysv, posix, влияние shmmax, shmall в PostgreSQL, про lsipc и pmap и про маленький сегмент разделяемой памяти sysv. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 15:12 |
|
|
start [/forum/topic.php?fid=53&msg=39889181&tid=1994938]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 410ms |
0 / 0 |