Я читал почти все, что есть в сети об улучшении производительности postgres, но «правильные» значения для SHMMAX и SHMALL все еще ускользают от меня.
Консенсус выглядит так: SHMMAX = total_memory / 4 и SHMALL = total_memory / 2 - безопасные начальные значения.
Однако SHMALL можно измерить в страницах или байтах, и я не могу найти никакой информации о том, что используется в Ubuntu.
Использует ли Ubuntu (или вообще Debian) страницы или байты для SHMALL?
Для всех систем Linux, которые я использовал SHMALL
измеряется в страницах и SHMMAX
измеряется в байтах. Я думаю, вы можете проверить свою систему с помощью ipcs
команда, которая всегда преобразует указанные выше параметры в килобайты во время вывода и сравнивает их с sysctl
ценности:
[aseryozhin@centos ~]$ ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096 // SHMMNI
max seg size (kbytes) = 524288 // SHMMAX
max total shared memory (kbytes) = 8388608 // SHMALL
min seg size (bytes) = 1
[aseryozhin@centos ~]$ sysctl -e kernel.shmmax
kernel.shmmax = 536870912
[aseryozhin@centos ~]$ sysctl -e kernel.shmall
kernel.shmall = 2097152
[aseryozhin@centos ~]$ getconf PAGE_SIZE
4096
SHMMAX: 524288 * 1024 = 536870912
ШМАЛЛ: 8388608 * 1024/4096 = 2097152
Эти переменные измеряются в байтах, как указано в документации. Думаю, важнее посмотреть параметры конфигурации postgresql. При необходимости вам нужно посмотреть значения SHMALL / SHMMAX. Например, если вы хотите увеличить максимальное количество подключений, вам может потребоваться увеличить эти ограничения.
Настройка сервера базы данных зависит от вашего шаблона использования, такого как количество одновременных подключений и размер базы данных. Увеличение параметра конфигурации не всегда хорошо.