0
点赞
收藏
分享

微信扫一扫

启用大页-mysql内存使用优化

二 方案概述

在MySQL中,Innodb存储引擎可以使用大页为buffer pool和其他内存池分配内存空间。对于执行大量内存访问的应用程序可以通过使用大页降低Translation Lookaside Buffer (TLB) miss,从而使数据库性能得到改进。本方案旨在演示mysql中如何开启大页的使用。mysql默认是不启用大页的。

MySQL中大页面的标准使用尝试使用支持的最大大小,最多4MB。在Linux上使用大页面之前,必须启用内核来支持,并且有必要配置HugeTLB内存池

mysql> show variables like '%large_page%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| large_page_size | 0     |
| large_pages     | OFF   |
+-----------------+-------+
2 rows in set (0.00 sec)

三 实施步骤

3.1 大页数量配置

Innodb存储引擎可以使用大页为buffer pool和其他内存池分配内存空间,根据mysql的体系架构,我们可以在innodb_buffer_pool_size、innodb_log_buffer_size总和基础上增加10%冗余量来大致计算需要设置的大页数量。

mysql> select CEILING((@@innodb_buffer_pool_size++@@innodb_log_buffer_size )/(2*1024*1024)*1.1) pages;
+-------+
| pages |
+-------+
|  2825 |
+-------+
1 row in set (0.00 sec)

设置可用的大页的数量,每个大页默认是2m,此命令会真实的分配内存。

[root@mysqlhost /]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7821         536        6962           8         322        7010
Swap:          2999           0        2999
[root@mysqlhost /]# echo 2825 > /proc/sys/vm/nr_hugepages
[root@mysqlhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7821        6439        1031           8         350        1104
Swap:          2999           0        2999

3.2 用户组指定

设置指定组成员允许使用这些大页内存。

[root@mysqlhost /]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
[root@mysqlhost /]# echo 27 > /proc/sys/vm/hugetlb_shm_group

3.3 设置最大共享内存段的大小

kernel.shmmax用于定义单个共享内存段的最大值,shmmax设置应足够大,但也不能占用全部内存,因为可能存在导致其他程序无内存空间可用的风险。大于为大页指定的内存即可。

[root@mysqlhost /]# echo 7516192768 > /proc/sys/kernel/shmmax
[root@mysqlhost /]# cat /proc/sys/kernel/shmmax
7516192768

3.4 设置共享内存总大小

kernel.shmall 参数是控制共享内存页数从而控制共享内存的大小 。Linux共享内存页默认大小为4KB,对于MySQL使用,通常设置shmmax的值接近于shmall的值。

[root@mysqlhost /]# echo 1835008 > /proc/sys/kernel/shmall

3.5 修改/etc/security/limits.conf配置

[root@mysqlhost ~]# vi /etc/security/limits.conf
mysql  hard  memlock unlimited
mysql  soft  memlock unlimited

3.6 重启MySQL实例

修改mysql参数文件指定large-pages参数使用大页。

[root@mysqlhost ~]# vi /etc/my.cnf
large-pages

重启mysql实例确认开始使用大页。

mysql> show variables like '%large_page%';
+-----------------+---------+
| Variable_name   | Value   |
+-----------------+---------+
| large_page_size | 2097152 |
| large_pages     | ON      |
+-----------------+---------+
2 rows in set (0.01 sec)

mysql> 
[root@mysqlhost ~]# cat /proc/meminfo | grep -i huge
AnonHugePages:    632832 kB
HugePages_Total:    2825
HugePages_Free:     2756
HugePages_Rsvd:     2551
HugePages_Surp:        0
Hugepagesize:       2048 kB
[root@mysqlhost ~]#

四 参考文档

【1】https://dev.mysql.com/doc/refman/8.0/en/large-page-support.html

举报

相关推荐

0 条评论