Spec-Zone .ru
спецификации, руководства, описания, API

8.11.4.2. Включение Большой Поддержке Страницы

Немного архитектуры аппаратных средств/операционной системы поддерживает страницы памяти, больше чем значение по умолчанию (обычно 4 Кбита). Фактическая реализация этой поддержки зависит от используемого оборудования и операционной системы. Приложения, которые выполняют много доступов памяти, могут получить улучшения производительности при использовании больших страниц из-за уменьшенного Буфера быстрого преобразования адреса (TLB) промахи.

В MySQL большие страницы могут использоваться InnoDB, чтобы выделить память для ее пула буферов и дополнительного пула памяти.

Стандартное использование больших страниц в MySQL пытается использовать самый большой поддерживаемый размер, до 4 МБ. В соответствии с Солярисом, "большие страницы высшего качества" опция позволяет использованию страниц до 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, кажется, есть большая опция страниц, активированная по умолчанию. Чтобы проверить, является ли это истиной для Вашего ядра, используйте следующую команду и ищите выходные строки, содержащие "огромный":

shell> cat /proc/meminfo | grep -i
        hugeHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       4096 kB

Непустой вывод команды указывает, что большая поддержка страницы присутствует, но нулевые значения указывают, что никакие страницы не конфигурируются для использования.

Если Ваше ядро должно быть реконфигурировано, чтобы поддерживать большие страницы, консультируйтесь hugetlbpage.txt файл для инструкций.

Предполагая, что Вашему ядру Linux включали большой поддержке страницы, сконфигурируйте это для использования MySQL, используя следующие команды. Обычно, Вы вставляете их rc файл или эквивалентный файл запуска, который выполняется во время последовательности начальной загрузки системы, так, чтобы команды выполнили каждый раз систему, запускаются. Команды должны выполниться рано в последовательности начальной загрузки, прежде, чем сервер MySQL запустится. Убедитесь, что изменили числа выделения и групповое число как соответствующие для Вашей системы.

# Set the number of pages to be used.# Each page is normally 2MB, so a value of 20 = 40MB.# This command actually allocates memory, so this much# memory must be available.echo 20 > /proc/sys/vm/nr_hugepages# Set the group number that is permitted to access this# memory (102 in this case). The mysql user must be a# member of this group.echo 102 > /proc/sys/vm/hugetlb_shm_group# Increase the amount of shmem permitted per segment# (12G in this case).echo 1560281088 > /proc/sys/kernel/shmmax# Increase total amount of shared memory.  The value# is the number of pages. At 4KB/page, 4194304 = 16GB.echo 4194304 > /proc/sys/kernel/shmall

Для использования MySQL Вы обычно хотите значение shmmax быть близко к значению shmall.

Чтобы проверить большую конфигурацию страницы, проверить /proc/meminfo снова как описано ранее. Теперь следует видеть некоторые ненулевые значения:

shell> cat /proc/meminfo | grep -i
        hugeHugePages_Total:      20HugePages_Free:       20HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       4096 kB

Заключительный шаг, чтобы использовать hugetlb_shm_group должен дать mysql пользователь "неограниченное" значение для предела memlock. Это может сделанным любой, редактируя /etc/security/limits.conf или добавляя следующую команду к Вашему mysqld_safe сценарию:

ulimit -l unlimited

Добавление ulimit команды к mysqld_safe вызывает root пользователь, чтобы установить memlock предел к unlimited прежде, чем переключиться на mysql пользователь. (Это предполагает, что mysqld_safe запускается root.)

Большая поддержка страницы в MySQL отключается по умолчанию. Чтобы включить этому, запустите сервер с --large-pages опция. Например, можно использовать следующие строки в своем сервере my.cnf файл:

[mysqld]large-pages

С этой опцией, InnoDB использует большие страницы автоматически для его пула буферов и дополнительного пула памяти. Если InnoDB не может сделать этого, это отступает к использованию традиционной памяти и пишет предупреждение журналу ошибок: Предупреждение: Используя пул обычной памяти

Чтобы проверить, что большие страницы используются, проверить /proc/meminfo снова:

shell> cat /proc/meminfo | grep -i
        hugeHugePages_Total:      20HugePages_Free:       20HugePages_Rsvd:        2HugePages_Surp:        0Hugepagesize:       4096 kB