【原创】MySQL5.7.18(ptmalloc VS tcmalloc VS jemalloc)性能测试
ptmalloc(glibc的malloc)是Linux提供的内存分配管理模块,目前我们MySQL默认使用的内存分配模块。
tcmalloc是Google提供的内存分配管理模块。
jemalloc是FreeBSD提供的内存分配管理模块。
下面用sysbench对MySQL5.7.18搭配三种不同的内存分配管理模块做了压测。
【sysbench配置】
16个tables,单表数据量2500W,OLAP模式,预热时间600S,单次测试时间600S,每个场景测试5次。
【mysql配置】
关闭预热,buffer pool调整为16G,服务器物理内存64G
innodb_buffer_pool_load_at_startup=0
innodb_buffer_pool_size=16G
【测试数据】
QPS |
ptmalloc2 |
tcmalloc4.1.0 |
jemalloc-5.0.1 |
warm up |
8158.05 |
8720.78 |
8828.06 |
Threads 16 |
8788.19 |
8755.96 |
9976.9 |
Threads 32 |
13481.61 |
11908.99 |
13559.32 |
Threads 64 |
15722.35 |
15678.27 |
17015.05 |
Threads 128 |
17957.68 |
17929.17 |
19665.71 |
TPS |
ptmalloc2 |
tcmalloc4.1.0 |
jemalloc-5.0.1 |
warm up |
453.22 |
484.47 |
490.44 |
Threads 16 |
488.21 |
486.43 |
554.25 |
Threads 32 |
748.96 |
661.59 |
753.28 |
Threads 64 |
873.43 |
870.99 |
945.24 |
Threads 128 |
997.57 |
996.02 |
1092.42 |
ptmalloc |
tcmalloc |
jemalloc |
|
VmRSS: |
2259272 |
2325520 |
2899384 |
VmRSS: |
4942224 |
4205684 |
3990556 |
VmRSS: |
7351488 |
6668696 |
6585080 |
VmRSS: |
9703240 |
9031616 |
9027632 |
VmRSS: |
12005820 |
11318512 |
11479836 |
VmRSS: |
14261672 |
13639416 |
13845412 |
VmRSS: |
16467972 |
15919476 |
16175976 |
VmRSS: |
18358520 |
18111000 |
18443324 |
VmRSS: |
18366840 |
18403856 |
18649424 |
VmRSS: |
18368820 |
18404236 |
18650740 |
VmRSS: |
18368504 |
18406144 |
18650896 |
VmRSS: |
18467844 |
18492448 |
18718692 |
VmRSS: |
18469004 |
18492880 |
18719844 |
VmRSS: |
18469268 |
18493016 |
18720412 |
VmRSS: |
18469796 |
18493568 |
18721692 |
【图形展示】
【结论】
1、jemalloc在多线程高并发环境下,随着并发线程数的增加,QPS和TPS增长比较稳定,性能高于ptmalloc和tcmalloc。
2、在目前的压测场景下,随着线程数的增加,MySQL进程占用的物理内存并没有太大的差异。
3、关于jemalloc的应用,相对tcmalloc而言,jemalloc是MariaDB,Redis等默认的内存分配管理模块,另外AliSQL也集成了jemalloc。
【附录】
1、下图是其他机构的一个测试报告(针对较早之前的版本),最左边的是glibc的ptmalloc,最右边的就是jemalloc,
可以看到jemalloc和tcmalloc的性能差异不大,jemalloc的效率稍高。
2、三者的比较
ptmalloc2 |
tcmalloc4.1.0 |
jemalloc-5.0.1 |
ptmalloc的缺陷
|
tcmalloc的改进
|
jemalloc的优化
|
参考资料:
ptmalloc,tcmalloc和jemalloc内存分配策略研究
http://www.360doc.com/content/13/0915/09/8363527_314549128.shtml
内存优化总结:ptmalloc、tcmalloc和jemalloc
http://www.cnhalo.net/2016/06/13/memory-optimize/
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束