Порядок включения HugePages

Проверим поддерживается ли HugePages на аппаратном уровне:

cat /sys/kernel/mm/transparent_hugepage/enabled

always [madvise] never
BASH

 

Данный пункт говориn о том, что включены ли большие прозрачные страницы, включать их не стоит, об этом описано ниже.

Далее, добавляем в файл строку:

sudo echo "vm.nr_hugepages=<количество страниц>" >> /etc/sysctl.conf
BASH


Количество необходимых для Postgres страниц, можно вычислить по простой формуле

shared_buffer Kb / 2048 = количество необходимых страниц;(всегда лучше добавлять страницы с запасом);

2048- размер страницы в килобайтах;


Так же стоит учитывать значения параметра max_connections (примерно на 1000 соединений 20MB = 10 HugePages)

Применяем настройки и перезагружаем ОС:

sudo sysctl -p

sudo reboot
BASH


Далее здесь можно будет увидеть цифры отличные от нуля, что будет означать, что HugePages были включены:

cat /proc/meminfo | grep HugePages

HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
BASH


Для чего нужно включать эти самые 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).