【原创】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/

【原创】MySQL5.7.18(ptmalloc VS tcmalloc VS jemalloc)性能测试的更多相关文章
- ptmalloc、tcmalloc和jemalloc
内存优化总结:ptmalloc.tcmalloc和jemalloc 转载 2017年09月05日 18:57:12 3674 转载于:http://www.cnhalo.net/2016/06/13/ ...
- 内存优化总结:ptmalloc、tcmalloc和jemalloc(转)
转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越 ...
- 内存优化总结:ptmalloc、tcmalloc和jemalloc
概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升.比如nginx, 它在每个连接accept后会malloc ...
- Apache2.4.23+PHP5.6.30+MySQL5.7.18安装教程
最近在工作中常常接触到PHP,自己也写过一些简单的PHP页面.我们知道PHP是在服务器端运行的脚本语言,因此我们需要配置服务器环境.之前为了省事直接使用的是wamp集成环境,但是突然某一天领导要求我们 ...
- mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES)
mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES)()里面的为shel ...
- mysql5.7.18的安装与主从复制
CentOS6.7安装mysql5.7.18 1. 解压到/usr/local目录 # tar -zxvf mysql-5.7.18-linux-glibc2.5-i686.tar.gz -C /u ...
- Centos7.3下mysql5.7.18安装并修改初始密码的方法
Centos7.3下mysql5.7.18安装并修改初始密码的方法 原文链接:http://www.jb51.net/article/116032.htm 作者:Javen205 字体:[增加 减小] ...
- windows10下 MySQL5.7.18版本安装过程及遇到的问题
windows10下 MySQL5.7.18版本安装过程及遇到的问题 mysql-5.7.18-winx64 安装 1.解压 此次将MySQL装在H盘,依个人喜 ...
- Windows下安装MySQL5.7.18的方法
准备: 操作系统:win7 下64位的zip版本的MySQL,路径:http://dev.mysql.com/downloads/mysql/ 我下的是最新版的MySQL,解压后,目录如下: 可以看到 ...
随机推荐
- 远程连接工具PuTTY和MTPuTTY
PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件 官网 http://www.chiark.greenend.org.uk/~sgtatham/putty/ putty ...
- 【leetcode 简单】 第八十四题 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...
- 【疑点】<p></p>标签为什么不能包含块级标签?还有哪些特殊的HTML标签?
最近,在码代码的时候,就是下面的这段代码,我犯了一个很不起眼,但犯了就致命的BUG. <body> <p> <ol> <li>Hello</li& ...
- oracle05
1. 数据处理 说完了所有的查询,下面说说增.删.改. 1.1. Update 在plsql Developer工具中,加上rowid可以更改数据. 使用工具进行更新数据的操作 在工具中更新数据方式一 ...
- 引发类型为“System.OutOfMemoryException”的异常
在运维工作中,经常能接到客户的反馈这个:引发类型为“System.OutOfMemoryException”的异常.客户反馈物理内存都还有富余,怎么报内存不足的错误呢! 什么时候会引发System.O ...
- 排序算法的java实现
冒泡.选择就不写了.很常见 一:插入排序: /** * 插入排序 */ public class P4_3 { static void insertSort(int[] a){ int j,t; /* ...
- aarch64_l1
L-function-1.23-18.fc26.aarch64.rpm 2017-02-14 08:01 139K fedora Mirroring Project L-function-devel- ...
- linux快速复制大量小文件方法 nc+tar【转】
1,在需要对大量小文件进行移动或复制时,用cp.mv都会显得很没有效率,可以用tar先压缩再解压缩的方式. 2,在网络环境中传输时,可以再结合nc命令,通过管道和tcp端口进行传输. nc和tar ...
- phpStudy配置https
phpStudy配置https 1.打开vhosts-conf配置文件 2.在配置文件中增加如下内容 server { listen 443; server_name tam.gogugong.com ...
- python之uinttest单元测试框架
unittest,是python中针对单元测试的一个测试框架 相当于python版的junit 简单举个例子: 如图,使用时,测试类需要继承单元测试TestCase这个类 必须要有setUp()和te ...