HugePage: что это и зачем?
Порядок включения HugePages
Проверим поддерживается ли HugePages на аппаратном уровне:
cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
Данный пункт говориn о том, что включены ли большие прозрачные страницы, включать их не стоит, об этом описано ниже.
Далее, добавляем в файл строку:
sudo echo "vm.nr_hugepages=<количество страниц>" >> /etc/sysctl.conf
Количество необходимых для Postgres страниц, можно вычислить по простой формуле
shared_buffer Kb / 2048 = количество необходимых страниц;(всегда лучше добавлять страницы с запасом);
2048- размер страницы в килобайтах;
Так же стоит учитывать значения параметра max_connections (примерно на 1000 соединений 20MB = 10 HugePages)
Применяем настройки и перезагружаем ОС:
sudo sysctl -p
sudo reboot
Далее здесь можно будет увидеть цифры отличные от нуля, что будет означать, что HugePages были включены:
cat /proc/meminfo | grep HugePages
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Для чего нужно включать эти самые HugePages
HugePage стоит включать для того что получить прибавку в производительности. При их использовании уменьшаются размеры таблиц которые хранят физические адреса страниц, вместо хранения адресов на каждую 8 кб страницу, будет хранится адрес на одну 2 мб страницу.
Особого выигрыша в производительности не получить, если кластер работает с маленькими объемами памяти (shared buffers).
Как использовать Transparent Huge Pages
Известно, что это приводит к снижению быстродействия СУБД в некоторых системах Linux у ряда пользователей, поэтому использовать этот механизм в настоящее время не рекомендуется (в отличие от явного использования huge_pages).
Как включаются HugePages в PostgreSQL
Огромные страницы включаются в PostgreSQL с помощью изменения параметра huge_pages в postgresql.conf
huge_pages принимает значения: try, on, off. Принимает значение huge_pages заданное в системе (по-умолчанию 2 мб)
Главное стоит помнить о том, что при значении huge_pages=on, у вас должно быть необходимое количество огромных страниц для успешного запуска СУБД.
huge_page_size можете указать значение 2МБ или 1ГБ и никакое другое.
Из документации:
На современных 64-битных серверных платформах доступны, в частности, следующие размеры страниц: 2MB и 1GB (Intel и AMD), 16MB и 16GB (IBM POWER), и 64kB, 2MB, 32MB и 1GB (ARM).