Spec-Zone.ru › MySQL 5.7

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, выполнив следующие шаги:

  1. Определите количество необходимых больших страниц. Это размер буферного пула InnoDB, деленный на размер большой страницы, который можно рассчитать как innodb_buffer_pool_size / Hugepagesize. Предполагая значение по умолчанию для innodb_buffer_pool_size (128 МБ) и используя значение Hugepagesize, полученное из /proc/meminfo (2 МБ), это 128 МБ / 2 МБ, или 64 Huge Pages. Мы называем это значение P.

  2. Откройте файл /etc/sysctl.conf в текстовом редакторе в качестве пользователя root и добавьте показанную здесь строку, где P — количество больших страниц, полученное на предыдущем шаге:

    vm.nr_hugepages=P
    

    Используя фактическое значение, полученное ранее, дополнительная строка должна выглядеть так:

    vm.nr_hugepages=66
    

    Сохраните обновленный файл.

  3. В качестве пользователя root выполните следующую команду:

    $> sudo sysctl -p
    
    Примечание

    В некоторых системах файл больших страниц может иметь немного другое имя; например, некоторые дистрибутивы называют его nr_hugepages. В случае, если sysctl возвращает ошибку, связанную с именем файла, проверьте имя соответствующего файла в /proc/sys/vm и используйте его вместо него.

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

    $> grep -i huge /proc/meminfo
    AnonHugePages:   2686976 kB
    ShmemHugePages:        0 kB
    HugePages_Total:     233
    HugePages_Free:      233
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:          477184 kB
    
  4. Необязательно, но вы можете выполнить сжатие виртуальной машины Linux. Это можно сделать с помощью последовательности команд, возможно, в файле сценария, аналогично приведенному ниже:

    sync
    sync
    sync
    echo 3 > /proc/sys/vm/drop_caches
    echo 1 > /proc/sys/vm/compact_memory
    

    Для получения дополнительной информации о том, как это сделать, обратитесь к документации вашей операционной платформы.

  5. Проверьте все конфигурационные файлы, такие как my.cnf, используемые сервером, и убедитесь, что innodb_buffer_pool_chunk_size имеет значение больше размера страницы Huge. Значение по умолчанию для этой переменной составляет 128 МБ.

  6. Поддержка больших страниц в сервере 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/large-page-support.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API