暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 8.12.3.2 启用大页支持

原创 由迪 2021-07-08
598

某些硬件/操作系统架构支持大于默认值(通常为 4KB)的内存页。这种支持的实际实现取决于底层硬件和操作系统。由于减少了转换后备缓冲区 (TLB) 未命中,执行大量内存访问的应用程序可以通过使用大页面来获得性能改进。

在 MySQL 中,InnoDB 可以使用大页面为其缓冲池和附加内存池分配内存。

MySQL 中大页面的标准使用尝试使用支持的最大大小,最多 4MB。在 Solaris 下, “超大页面”功能允许使用高达 256MB 的页面。此功能可用于最新的 SPARC 平台。可以使用--super-large-pages--skip-super-large-pages 选项启用或禁用它 。

MySQL 还支持大页面支持的 Linux 实现(在 Linux 中称为 HugeTLB)。

在 Linux 上可以使用大页面之前,必须启用内核以支持它们,并且需要配置 HugeTLB 内存池。作为参考,HugeTBL API 记录在 Documentation/vm/hugetlbpage.txt您的 Linux 源文件中。

某些最新系统(如 Red Hat Enterprise Linux)的内核似乎默认启用了大页面功能。要检查这是否适用于您的内核,请使用以下命令并查找包含“巨大”的输出行 :

shell> cat /proc/meminfo | grep -i huge
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       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:      20
HugePages_Free:       20
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       4096 kB
复制

使用 的最后一步 hugetlb_shm_group是为 mysql用户提供一个“无限” 的 memlock 限制值。这可以通过编辑/etc/security/limits.conf或将以下命令添加到 mysqld_safe脚本来完成:

ulimit -l unlimited
复制

ulimit命令添加到 mysqld_safe会导致 root用户unlimited在切换到mysql用户之前 将 memlock 限制设置为 。(这假设 mysqld_safe是由 启动的 root。)

MySQL 中的大页面支持默认是禁用的。要启用它,请使用该--large-pages选项启动服务器 。例如,您可以在服务器my.cnf文件中使用以下几行 :

[mysqld] large-pages
复制

使用此选项,InnoDB自动为其缓冲池和附加内存池使用大页面。如果InnoDB不能这样做,它会回退到使用传统内存并向错误日志写入警告:警告:使用传统内存池

要验证是否正在使用大页面,请/proc/meminfo再次检查 :

shell> cat /proc/meminfo | grep -i huge
HugePages_Total:      20
HugePages_Free:       20
HugePages_Rsvd:        2
HugePages_Surp:        0
Hugepagesize:       4096 kB
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论