在LINUX平台配置 MSYQL 支持大页内存
发布时间:2022-03-31 10:45:59 所属栏目:MySql教程 来源:互联网
导读:操作系统: [root@oradb ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) 数据库: mysql select version(); +-----------+ | version() | +-----------+ | 5.6.27 | +-----------+ 1 row in set (0.00 sec) 在这个
操作系统: [root@oradb ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) 数据库: mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.27 | +-----------+ 1 row in set (0.00 sec) 在这个测试中我们设置400MB的大页内存给 MYSQL使用 1. 关闭匿名大页内存 下面的命令输出为 [always] 表示开启匿名大页内存,需要关闭 [root@oradb ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] never 在 /boot/grub/grub.conf 文件中添加 transparent_hugepage=never 禁止匿名大页内存 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=bfd79be7-6446-4864-bc1f-ad15d4b242ad rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet transparent_hugepage=never initrd /initramfs-2.6.32-358.el6.x86_64.img 重启操作系统,然后检查是否禁止了匿名大页 [root@oradb ~]# cat /sys/kernel/mm/transparent_hugepage/enabled always [never] # 已经成功禁止匿名大页内存 [root@oradb ~]# cat /proc/meminfo | grep -i huge AnonHugePages: 0 kB # AnonHugePages 为零,表示已经成功禁止了匿名大页内存 HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB # 大页内存的页面大小是2MB 2. 在内核参数中配置400MB的大页内存 # vi /etc/sysctl.conf # config hugepages # vm.nr_hugepages = MYSQL需要使用的内存 / 大页的页面大小 = 400/2=200 vm.nr_hugepages=200 vm.hugetlb_shm_group=507 # 507是MYSQL所属组ID [root@oradb ~]# sysctl -a |grep shmmax kernel.shmmax = 68719476736 [root@oradb ~]# sysctl -a |grep shmall kernel.shmall = 4294967296 操作系统默认已经设置 kernel.shmmax=64GB,kernel.shmall=4GB,已经超过我们 需要的内存量(400MB)所以不需要调整这两个参数。 3.重新加 LINUX 载内核参数 sysctl -p 4. 设置 MYSQL用户限制内存锁定400MB vi /etc/security/limits.conf mysql soft memlock 409600 #单位为KB,我们配置的是MYSQL用户限制内存锁定400MB mysql hard memlock 409600 5. 配置MYSQL启用大页内存 [mysqld] large-pages 6. 启动MYSQL /app/oracle/oradata2/mysql-5.6.27/bin/mysqld_safe --defaults-file=/app/oracle/oradata2/mysql-5.6.27/my.cnf --user=mysql & 检查已经使用了大页内存 [root@oradb mysql-5.6.27]# cat /proc/meminfo | grep -i huge AnonHugePages: 0 kB HugePages_Total: 200 HugePages_Free: 197 HugePages_Rsvd: 67 HugePages_Surp: 0 Hugepagesize: 2048 kB HugePages_Total为所分配的页面数目,和Hugepagesize相乘后得到所分配的内存大小。200*2/1024大约为200MB。 HugePages_Free为从来没有被使用过的Hugepages数目。即使 MYSQL INNDOB 缓冲池已经分配了这部分内存,但是如果没有实际写入, 那么看到的还是Free的。这是很容易误解的地方。 HugePages_Rsvd为已经被分配预留但是还没有使用的page数目。在 MYSQL 刚刚启动时,大部分内存应该都是Reserved并且Free的,随着 INNDOB 缓冲池的使用,Reserved和Free都会不断的降低。 HugePages_Free – HugePages_Rsvd 这部分是没有被使用到的内存,如果没有其他的 MYSQL实例,这部分内存也许永远都不会被使用到,也就是被浪费了。 在这个测试中没有使用的大页内存是 197-67=130*2=260MB。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐