最近一直在做性能压测相关的事情,有公众号的读者朋友咨询有赞的数据库服务器有没有开启huge page,我听说过huge page会对性能有所提升,本文就一探究竟。对过程没有兴趣的可以直接看结论。

二 Huge Page 来龙去脉

2.1 为什么需要Huge Page

在 Linux 操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为 4KB,因而将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能。当操作系统以 2MB 甚至更大作为分页的单位时,将会大大减少 TLB Miss 和缺页中断的数量,显著提高应用程序的性能。这也正是 Linux 内核引入大页面支持的直接原因。好处是很明显的,假设应用程序需要 2MB 的内存,如果操作系统以 4KB 作为分页的单位,则需要 512 个页面,进而在 TLB 中需要 512 个表项,同时也需要 512 个页表项,操作系统需要经历至少 512 次 TLB Miss 和 512 次缺页中断才能将 2MB 应用程序空间全部映射到物理内存;然而,当操作系统采用 2MB 作为分页的基本单位时,只需要一次 TLB Miss 和一次缺页中断,就可以为 2MB 的应用程序空间建立虚实映射,并在运行过程中无需再经历 TLB Miss 和缺页中断(假设未发生 TLB 项替换和 Swap)。

为了能以最小的代价实现大页面支持,Linux 操作系统采用了基于 hugetlbfs 特殊文件系统 2M 字节大页面支持。这种采用特殊文件系统形式支持大页面的方式,使得应用程序可以根据需要灵活地选择虚存页面大小,而不会被强制使用 2MB 大页面。via(InnoDB启用大内存页)

2.2 HugePage的优势:

1.增加TLB的命中率

2.Page是被锁定在内存中,降低内存交换;

3.锁定内存,降低内存释放与占用产生的性能降低;

4.提高内存的性能,降低CPU负载。

三 mysql 如何用huge page

不同系统的huge pages大小可能不一样,我们使用centos7 huge page 大小默认为2M 。

3.1 计算需要多少 huge pages

启用 huge page之前 首先我们要计算分配多少huge page给mysql 使用。一般的建议是mysql使用的总内存大小加上10%。计算公式如下

S = (query_cache_size + table_open_cache + innodb_buffer_pool_size + innodb_log_file_size + performance_schema.memory) + 10 %

那么 huge pages的个数大小是

vm.nr_hugepages=S/2M

3.2 设置mysql用户组使用huge pages

通过 id mysql 获取mysql所在的group id

# id mysqluid=27(mysql) gid=27(mysql) groups=27(mysql)

echo 27 > /proc/sys/vm/hugetlb_shm_group

3.3 为 mysql 用户提供memlock限制的“无限”值

编辑/etc/security/limits.conf 增加

#

#

#Where:

# can be:

# - a user name

# - @mysql 表示mysql用户组的不受限

##设置mysql 使用 HugePages

@mysql

soft memlock unlimited

@mysql

hard memlock unlimited

编辑 my.cnf 在[mysqld]里面增加

large_pages=1

3.4验证hugepage是否生效

# cat /proc/meminfo | grep HugeAnonHugePages: 1294336 kBHugePages_Total: 5834HugePages_Free: 1394HugePages_Rsvd: 921HugePages_Surp: 0Hugepagesize: 2048 kB

出现不为0的值,HugePagesFree小于HugePagesTotal.

3.5 启动MySQL 可能遇到的问题

在启动mysql的时候,最容易报的错误是:

[Warning] InnoDB: Failed to allocate 140509184 bytes. errno 12[Warning] InnoDB: Using conventional memory pool

出现上面的提示大概率是因为

1.nr_hugepages的值*2M小于innodb使用的内存大小,需要调整nr_hugepages 的值。

2.针对mysql用户组的 memlock 是否设置。在启动mysql时,一定要先查看用ulimit -a 来查看max locked memory 设置是否合理。

3.6 压测结果

OS centos 7.10 内核 3.10

DB 相关压测参数

两个实例 一个开启和未开启 大页性能无差异。和网上的资料说性能会有所提升不一致。

四 总结

我根据 官方文档 和网上的相关资料,检查了开启内存大页的步骤没有异常,而且压测两次。如果读者朋友中有压测huge page且有性能提升的,欢迎留言相互交流学习。

参考文章

官方文档

https://dev.mysql.com/doc/refman/5.7/en/large-page-support.html

InnoDB启用大内存页

https://www.cnblogs.com/gomysql/p/3627915.html

Huge Page 是否是拯救性能的万能良药?

http://cenalulu.github.io/linux/huge-page-on-numa/

mysql hugepage_huge page 能给MySQL 带来性能提升吗?相关推荐

  1. huge page 能给MySQL 带来性能提升吗?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 转自公众号:yangyidba 一 前言 最近一直在做性能压测相关的事情,有公众号的读者朋友 ...

  2. 内存和显存_【硬件资讯】显存再升级?Nvidia新卡实锤GDDR6X!显存大升级能否带来性能提升??...

    新闻1:美光泄密 RTX 3090显卡用上GDDR6X显存:带宽堪比HBM2 NVIDIA新一代显卡越来越近了,8月31日就有可能公布重大消息,安培GPU核心的RTX 30系列最快下个月就能买到.首发 ...

  3. CVPR 2023 | HPM:在掩码学习中挖掘困难样本,带来稳固性能提升!

    ©作者 | 王淏辰 今天介绍我们在自监督掩码学习(Masked Image Modeling)领域的一篇原创工作 HPM (Hard Patches Mining for Masked Image M ...

  4. SSD对HADOOP集群性能提升 调研及测试计划

    摘要 本文主要调研SSD对于HADOOP集群性能的影响,并制定相应的测试计划,性能影响主要针对常见的HADOOP,HBASE,HIVE三个组件. 通过调研发现,组件自身也在考虑SSD对其产生的性能影响 ...

  5. MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第一章: ...

  6. mysql笔记(锁、事务、性能优化、压测结果)

    Mysql 该笔记,主要根据kkb课程并结合网上资料和自己的理解而形成. 一.Mysql架构 1.1 逻辑架构 这是从网上copy过来的图.网上一些教程会把mysql也进行分层. 连接层:Connec ...

  7. 安装MYSQL最低的RAM_安装MySQL后,需要调整的10个性能配置项

    在本博客中,我们将和大家讨论下 MySQL 数据库安装后,建议调整的十个性能设置参数. 通常情况下,当我们需要进行 MySQL 性能审计时,我们将审查 MySQL 配置并提出改进建议.在大多数情况下, ...

  8. mysql 默认page大小_MySQL innodb_page_size

    原标题:MySQL innodb_page_size 墨墨导读:Page是MySQL Innodb存储的最基本结构,也是Innodb磁盘管理的最小单位,了解page的一些特性,可以更容易理解MySQL ...

  9. mysql数据库多少张表会影响性能_mysql数据库多少张表会影响性能

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  10. 近数据处理(NDP)——GaussDB(for MySQL)性能提升的秘密

    摘要:云堆栈的深度集成是释放云数据库力量的关键,华为云在实现这一目标方面处于领先地位,正如GaussDB(for MySQL)所证明的那样. 本文分享自华为云社区<近数据处理(NDP),为Gau ...

最新文章

  1. Linux-CAN Bus
  2. FPGA中系统运行频率计算方法
  3. MongoError: topology was destroyed解决方法
  4. c# 18位身份证源代码
  5. 在家办公的第一天,钉钉、企业微信集体“崩溃”...
  6. 硅谷封面|美国人要小心了!亚马逊正在监控他们的一举一动
  7. 香帅的北大金融学课笔记17 -- 公司治理
  8. C# Winform中慎用Application.DoEvents
  9. 工业交换机的价格为什么有高低之分?
  10. 一步步编写操作系统 31 cpu的分支预测 下
  11. git-注册与激活-创建一个测试用途的仓库-github
  12. Spring Boot 2 尝鲜-动态 Banner
  13. WIN8 下IE突然无法打开(管理员权限可打开)
  14. 欧盟将推出自己的互联网扩展域名
  15. 64位linux安装mysql数据库吗_linux下怎么安装mysql数据库
  16. static关键字_乐字节Java|this关键字、static关键字、block块
  17. 《初识Scratch》教学设计
  18. 计算机取证程序论文,计算机取证论文参考文献推荐 计算机取证论文参考文献哪里找...
  19. centos7下载busybox
  20. hdu 6592 Beauty Of Unimodal Sequence

热门文章

  1. 自学JQuery Mobile的几个例子
  2. 2021年安全生产模拟考试(全国特种作业操作证电工作业-继电保护模拟考试题库一)安考星
  3. 如何将java项目部署到linux环境(Tomcat)
  4. 植物研究最新进展(2021年11月)
  5. 被晨光搁浅的誓言无声
  6. 四色定理c语言,阅读下列程序说明和C代码,将应填入(n)处。【程序5说明】著名的四色定理指出..._考试资料网...
  7. 移动端 Retina屏 各大主流网站1px的解决方案
  8. 企业邮箱申请注册流程,10分钟搞定公司企业邮箱
  9. 美国TJX公司 - MBA智库百科
  10. springtboot 操作es