在LINUX平台配置 MSYQL 支持大页内存
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,操作系统:[root@oradb ~]# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 6.4 (Santiago)数据
千家信息网最后更新 2026年10月31日在LINUX平台配置 MSYQL 支持大页内存操作系统:
[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。
[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。
内存
分配
配置
操作系统
参数
大小
数目
系统
页面
成功
内核
用户
检查
测试
缓冲
限制
不断
两个
也就是
单位
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网新科技
深圳九邦互联网科技有限公司
广州紫鲸互联网科技有限公司
互联网和科技创新
疫情对互联网科技公司影响
互联网扶贫科技
金诺互联网科技
互联网科技小贷
杭州互联网科技公司
成都互联网科技公司
互联网科技英文翻译
互联网 科技服务平台
成都仁贤领冠互联网科技有限公司
广西拼得多互联网科技有限公司
北京三清互联网科技
欧洲十大科技互联网公司
崇明区互联网教育科技售后服务
哈尔滨屹滨互联网科技有限公司
允成互联网科技有限公司融资
无锡工业互联网科技有限公司
耶加雪菲
科技和互联网公司
互联网科技股票
紫鲸互联网科技
天下捷融互联网科技
联恩商钥互联网科技有限公司
蓝色互联网科技
互联网媒体平台算高科技产业
互联网新科技动漫ppt素材
互联网金融运营模式中的金融科技