Spec-Zone.ru › MySQL 5.7

14.8.4 Настройка механизма выделения памяти InnoDB

При разработке InnoDB, механизмы выделения памяти, поставляемые операционными системами и библиотеками выполнения, часто были недостаточно эффективными и масштабируемыми. В то время не существовало библиотек механизмов выделения памяти, оптимизированных для многоядерных процессоров. Поэтому, InnoDB реализовал собственный механизм выделения памяти в подсистеме mem. Этот механизм защищен единственным мьютексом, что может привести к . InnoDB также реализует интерфейс обёртки вокруг системного механизма выделения памяти (malloc и free), который также защищен единственным мьютексом.

Сегодня, с широким распространением многоядерных систем и созреванием операционных систем, существенно улучшились механизмы выделения памяти, предоставляемые операционными системами. Эти новые механизмы работают лучше и масштабируются эффективнее, чем раньше. Большинство рабочих нагрузок, особенно те, где память часто выделяется и освобождается (например, при объединении нескольких таблиц), выигрывают от использования более оптимизированного механизма выделения памяти, по сравнению с внутренним, специфичным для InnoDB механизмом.

Вы можете контролировать, использует ли InnoDB свой собственный механизм выделения памяти или механизм операционной системы, установив значение параметра конфигурации системы innodb_use_sys_malloc в файле опций MySQL (my.cnf или my.ini). Если параметр установлен на значение ON или 1 (значение по умолчанию), InnoDB использует функции malloc и free базовой системы, а не управляет пулами памяти самостоятельно. Этот параметр не является динамическим и действует только при запуске системы. Чтобы продолжить использование механизма выделения памяти InnoDB, установите innodb_use_sys_malloc в значение 0.

Когда механизм выделения памяти InnoDB отключён, InnoDB игнорирует значение параметра innodb_additional_mem_pool_size. Механизм выделения памяти InnoDB использует дополнительный пул памяти для удовлетворения запросов выделения без обращения к системному механизму выделения памяти. Когда механизм выделения памяти InnoDB отключён, все такие запросы удовлетворяются системным механизмом выделения памяти.

На системах Unix-подобных, использующих динамическую компоновку, замена механизма выделения памяти может быть столь же простой, как установка переменной окружения LD_PRELOAD или LD_LIBRARY_PATH, указывающей на динамическую библиотеку, реализующую механизм выделения памяти. На других системах может потребоваться перекомпиляция. Обратитесь к документации выбранной вами библиотеки механизма выделения памяти.

Поскольку InnoDB не может отслеживать всё использование памяти при использовании системного механизма выделения памяти (innodb_use_sys_malloc равно ON), раздел “ПУЛ БУФЕРОВ И ПАМЯТЬ” в выводе команды SHOW ENGINE INNODB STATUS включает только статистику пула буферов в “Общее выделение памяти”. Любая память, выделенная с помощью подсистемы mem или с помощью ut_malloc, исключается.

Примечание

innodb_use_sys_malloc и innodb_additional_mem_pool_size были устаревши в MySQL 5.6 и удалены в MySQL 5.7.

Для получения дополнительной информации о последствиях для производительности использования памяти InnoDB, см. Раздел 8.10, «Буферизация и кэширование».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-performance-use_sys_malloc.html

Spec-Zone.ru

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