Spec-Zone .ru
спецификации, руководства, описания, API
|
Немного архитектуры аппаратных средств/операционной системы поддерживает страницы памяти, больше чем значение по умолчанию (обычно 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
huge
HugePages_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
huge
HugePages_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
huge
HugePages_Total: 20HugePages_Free: 20HugePages_Rsvd: 2HugePages_Surp: 0Hugepagesize: 4096 kB