GreatSQL社区

搜索

DB架构师:曾凡坤

2025-01-25

DB架构师:曾凡坤 已有 50 次阅读2025-1-25 16:05 |个人分类:MYSQL|系统分类:运维实战

关于大页可以参考我上一篇博客

MYSQL内存.OOM.大页内存


MySQL中大页设置

在MySQL中启用大页(Huge Pages)可以提高性能,还可以减少内存的使用。大页能够减少操作系统的页表,由此可减轻CPU负担和内存空间,从而减少了内存管理开销。在MySQL中,InnoDB可以使用大页面为其缓冲池和额外的内存池分配内存。
1.首先要在my.cnf配置文件,开启大页支持

[mysqld]
large-pages=ON

2.确保innodb_buffer_pool_chunk_size设置为大于Hugepagesize。默认值为128M。

3.保证操作系统大页缓存数量。InnoDB缓冲池的大小除以大页面大小(InnoDB_buffer_pool_size/Hugepagesize)。如:innodb_buffer_pool_size的默认值(128MB),并使用从/proc/meminfo(2MB)获得的Hugepagesize值,这是128MB/2MB=64,即确定所需的大页数64(称这个值为P)。
需要在操作系统/etc/sysctl.conf,并添加此处显示的行,其中P是在上一步中获得的大页面数:

#添加大页数量
shell> vim /etc/sysctl.conf
vm.nr_huge_pages=64

#载入sysctl配置文件
shell> sysctl -p

备注:nr_hugepages:表示池中大于HugePages数量。剩余HugePages的最大数量由nr_overcommit_hugepages 控制。

到此MySQL大页配置完成。

使用建议

在MySQL使用场景中,是否需要开启HugePages配置。大页虽然有优点,但又可能带来不确定的缺点。如:软件本身也对这方面的支持,虚拟化的融入,更难控制大页的处理。因此需要对使用大页的应用,进行压测,来判断是否受益于页。
可以是使用perf进行大页统计和分析:

#每秒钟输出一次dTLB读取大页情况CTRL-C退出
shell> perf stat -e dTLB-loads,dTLB-load-misses,dTLB-stores,dTLB-store-misses -a -I 1000
#           time             counts unit events
     1.001030174    1,404,619,363   dTLB-loads           [100.00%]                                       
     1.001030174    8,371,328       dTLB-load-misses     [100.00%]                                        
     1.001030174    8,172,342       dTLB-stores          [100.00%]                                       
     1.001030174    624,246         dTLB-store-misses                                           
 
# 查看指定进程的dTLB读取大页情况
shell> perf stat -e dTLB-loads,dTLB-load-misses,dTLB-stores,dTLB-store-misses -a -p 248777
 Performance counter stats for process id '248777':
     1,579,026,997      dTLB-loads
         8,628,213      dTLB-load-misses          # 0.55% of all dTLB cache hits
       773,612,816      dTLB-stores
           681,404      dTLB-store-misses

       7.571849344 seconds time elapsed

# 每秒钟输出一次iTLB未命中率情况
shell> perf stat -e iTLB-load,iTLB-load-misses -a -I 1000
#           time             counts unit events
     1.000715912    624,176,335      iTLB-load              [100.00%]                                         
     1.000715912      8,200,197      iTLB-load-misses 

# 查看指定进程的iTLB情况
shell> perf stat -e iTLB-load,iTLB-load-misses -a -p 248777
 Performance counter stats for process id '248777':

   1,609,612,422      iTLB-load                            [100.00%]                        
       9,912,523      iTLB-load-misses      #0.06% of all iTLB cache hits                                   

       2.004872274 seconds time elapsed

总结

启用大页需要硬件和操作系统的支持,并且需要对系统进行适当的配置。注意:启动大页,MYSQL会部分使用大页,大部分不使用大页的欺骗情况的出现.


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-2-5 16:52 , Processed in 0.013813 second(s), 10 queries , Redis On.
返回顶部