8.12.4.3 Включение поддержки больших страниц
Некоторые архитектуры аппаратного обеспечения и операционных систем поддерживают страницы памяти, размер которых больше стандартного (обычно 4 КБ). Реальная реализация этой поддержки зависит от базового аппаратного обеспечения и операционной системы. Приложения, выполняющие многочисленные обращения к памяти, могут получить прирост производительности при использовании больших страниц из-за уменьшения промахов буфера трансляции адресов (TLB).
В MySQL большие страницы могут использоваться InnoDB для выделения памяти для своего буферного пула и дополнительного пула памяти.
При стандартном использовании больших страниц в MySQL система пытается использовать наибольший поддерживаемый размер, до 4 МБ. В Solaris функция “сверхбольшие страницы” позволяет использовать страницы до 256 МБ. Эта функция доступна для последних платформ SPARC. Ее можно включить или выключить, используя параметр --super-large-pages или --skip-super-large-pages.
MySQL также поддерживает реализацию поддержки больших страниц в Linux (которая называется HugeTLB в Linux).
Прежде чем использовать большие страницы в Linux, необходимо, чтобы ядро поддерживало их, и нужно настроить пул памяти HugeTLB. Для справки, API HugeTBL документирован в файле Documentation/vm/hugetlbpage.txt ваших исходных кодов Linux.
В ядрах некоторых последних систем, таких как Red Hat Enterprise Linux, функция больших страниц может быть включена по умолчанию. Чтобы проверить, верно ли это для вашего ядра, используйте следующую команду и найдите строки вывода, содержащие “huge”:
$> grep -i huge /proc/meminfo
AnonHugePages: 2658304 kB
ShmemHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
Непустой вывод команды указывает на наличие поддержки больших страниц, а нулевые значения указывают на то, что страницы не настроены для использования.
Если ваше ядро необходимо переконфигурировать для поддержки больших страниц, ознакомьтесь с файлом hugetlbpage.txt для получения инструкций.
Предполагая, что ваше ядро Linux имеет включенную поддержку больших страниц, настройте ее для использования MySQL, выполнив следующие шаги:
Определите количество необходимых больших страниц. Это размер буферного пула InnoDB, деленный на размер большой страницы, который можно рассчитать как
innodb_buffer_pool_size/Hugepagesize. Предполагая значение по умолчанию дляinnodb_buffer_pool_size(128 МБ) и используя значениеHugepagesize, полученное из/proc/meminfo(2 МБ), это 128 МБ / 2 МБ, или 64 Huge Pages. Мы называем это значениеP.-
Откройте файл
/etc/sysctl.confв текстовом редакторе в качестве пользователя root и добавьте показанную здесь строку, гдеP— количество больших страниц, полученное на предыдущем шаге:vm.nr_hugepages=
PИспользуя фактическое значение, полученное ранее, дополнительная строка должна выглядеть так:
vm.nr_hugepages=66
Сохраните обновленный файл.
-
В качестве пользователя root выполните следующую команду:
$>
sudo sysctl -pПримечаниеВ некоторых системах файл больших страниц может иметь немного другое имя; например, некоторые дистрибутивы называют его
nr_hugepages. В случае, если sysctl возвращает ошибку, связанную с именем файла, проверьте имя соответствующего файла в/proc/sys/vmи используйте его вместо него.Чтобы проверить конфигурацию больших страниц, проверьте
/proc/meminfoснова, как описано ранее. Теперь в выводе должны быть видны дополнительные ненулевые значения, примерно так:$>
grep -i huge /proc/meminfoAnonHugePages: 2686976 kB ShmemHugePages: 0 kB HugePages_Total: 233 HugePages_Free: 233 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 477184 kB -
Необязательно, но вы можете выполнить сжатие виртуальной машины Linux. Это можно сделать с помощью последовательности команд, возможно, в файле сценария, аналогично приведенному ниже:
sync sync sync echo 3 > /proc/sys/vm/drop_caches echo 1 > /proc/sys/vm/compact_memory
Для получения дополнительной информации о том, как это сделать, обратитесь к документации вашей операционной платформы.
Проверьте все конфигурационные файлы, такие как
my.cnf, используемые сервером, и убедитесь, чтоinnodb_buffer_pool_chunk_sizeимеет значение больше размера страницы Huge. Значение по умолчанию для этой переменной составляет 128 МБ.-
Поддержка больших страниц в сервере MySQL отключена по умолчанию. Чтобы включить ее, запустите сервер с
--large-pages. Вы также можете сделать это, добавив следующую строку в раздел[mysqld]файла конфигурации сервераmy.cnf:large-pages=ON
При включенном этом параметре,
InnoDBавтоматически использует большие страницы для своего буферного пула и дополнительного пула памяти. ЕслиInnoDBне может сделать этого, она возвращается к использованию традиционной памяти и записывает предупреждение в журнал ошибок: Warning: Using conventional memory pool.
Вы можете проверить, что MySQL теперь использует большие страницы, снова проверив /proc/meminfo после перезапуска mysqld, например так:
$> grep -i huge /proc/meminfo
AnonHugePages: 2516992 kB
ShmemHugePages: 0 kB
HugePages_Total: 233
HugePages_Free: 222
HugePages_Rsvd: 55
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 477184 kB
© 2025 Oracle
Licensed under the GPLv2 License.