合 MySQL数据库配置大页
简介
官网:https://dev.mysql.com/doc/refman/8.0/en/large-page-support.html
Linux 标准大页和透明大页参考:https://www.dbaup.com/linux-biaozhundayehetoumingdaye.html
一般情况下使用的内存为每页4K,使用 huge page 的话默认是每页 2M。如果设置MySQL使用 huge page 至少有两个好处,一个是可以减少 Translation Lookaside Buffer (TLB) 失误以提高性能,另一个是利用 huge page不会swap的特性保证MySQL的内存不会被交换到swap中。
MySQL 5.0.3之后在linux上支持huge page,可以使用 large-page 选项启动MySQL。当然还有一些相关的系统设置。
配置MySQL数据库使用大页
1、设置max locked memory
1 2 3 4 5 6 | cat >> /etc/security/limits.conf <<"EOF" @mysql hard memlock unlimited @mysql soft memlock unlimited EOF |
@mysql
表示mysql用户组的不受限。
将ulimit -l unlimited
加入mysqld_safe
命令中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [root@lhrblog /]# which mysqld_safe /usr/bin/mysqld_safe [root@lhrblog /]# vi /usr/bin/mysqld_safe [root@lhrblog /]# [root@lhrblog /]# [root@lhrblog /]# more /usr/bin/mysqld_safe | grep unlimited -C 2 # executing mysqld_safe ulimit -l unlimited # Initialize script globals [root@lhrblog /]# ulimit -l unlimited [root@lhrblog /]# ulimit -l unlimited [root@lhrblog /]# ulimit -a 。。。 max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited 。。。 |
保证max locked memory为unlimited。
2、将mysql用户所属组添加到系统内核文件/etc/sysctl.conf中
1 2 | [root@lhrblog ~]# id mysql uid=1002(mysql) gid=1002(mysql) groups=1002(mysql) |
3、在 /etc/sysctl.conf 文件中添加 vm.nr_hugepages 参数,使用sysctl -p
立即生效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | echo 1030 > /proc/sys/vm/nr_hugepages echo 1002 > /proc/sys/vm/hugetlb_shm_group cat >> /etc/sysctl.conf <<"EOF" vm.hugetlb_shm_group=1002 vm.nr_hugepages=1030 EOF [root@lhrblog ~]# cat /etc/sysctl.conf | grep nr_hugepages vm.nr_hugepages=1030 [root@lhrblog ~]# sysctl -p [root@lhrblog ~]# cat /proc/sys/vm/nr_hugepages 1030 [root@lhrblog /]# cat /proc/sys/vm/hugetlb_shm_group 1002 |
使用命令grep -i HugePage /proc/meminfo
查看,如果HugePages_Free未到设定的值,那么可以多执行几次sysctl -p,或者重启OS。
这个指定总共huge page的页数,由于分配时需要有连续的内存空间,所以如果在运行了一段时间的系统上执行,可能无法分配到指定的数量,即使还有足够的内存。
vm.nr_hugepages为页的个数(每页为2Mb),需要比参数innodb_buffer_pool_size大。
4、设置内核参数kernel.shmmax和kernel.shmall
需要设置内核参数kernel.shmmax和kernel.shmall,否则MySQL启动时会报22的错误