Я хочу убедиться, что Postgresql может использовать всю доступную память для кэширования на выделенном сервере БД. Как мне убедиться, что настройки разделяемой памяти ядра верны? Кто-нибудь знает расчет, чтобы убедиться, что shmax и т. Д. Не ограничивают Postgresql?
Вот небольшой фрагмент, который позволяет серверу использовать до половины физической RAM для общей памяти:
#!/bin/bash
page_size=`getconf PAGE_SIZE`
phys_pages=`getconf _PHYS_PAGES`
shmall=`expr $phys_pages / 2`
shmmax=`expr $shmall \* $page_size`
echo \# Maximum shared segment size in bytes
echo kernel.shmmax = $shmmax
echo \# Maximum number of shared memory segments in pages
echo kernel.shmall = $shmall
Поместите результат в /etc/sysctl.conf и запустите:
sysctl -p
Тогда все готово.
PostgreSQL использует операционную систему для дополнения всех операций чтения и записи, поэтому вы действительно не хотите выделять половину оперативной памяти - у этого есть много места для выделенного сервера базы данных. Тесты с изменением объема выделенной оперативной памяти для сервера обычно показывают максимальную пропускную способность где-то между 15% и 40% от общего объема оперативной памяти; больше, и вы получите слишком много страниц с двойной буферизацией. И полезный верхний предел составляет около 8 ГБ в больших системах, и точка, из-за еще нерешенных проблем с конфликтом кеширования в коде сервера. Подробнее о настройке сервера на PostgreSQL вики.