tcmalloc mysql 缓存_使用TCMalloc优化mysql

之前有调整过my.cnf的配置,跑了许久,还算稳定。因为不是我装的,configure的参数不知道有没有优化,但是内存小我觉得是比较致命的缺点,而且挂的数据库比较多,并发一高,内存更是严重不足。想了很多缓解压力的办法,前段时间在张晏大大的blog里发现篇博客,了解到TCMalloc可以提高mysql在高并发下的性能。又在网上搜索了许多资料,觉得可行,而且很符合我们的实际情况。

什么是TCMalloc?

TCMalloc意思是线程缓存的malloc。

TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高服务器在高并发情况下的性能,降低系统负载。

别人翻译的TCMalloc介绍:http://shiningray.cn/tcmalloc-thread-caching-malloc.html

于是乎,今天又做了优化,在此简略记录一下数据,以便日后对比。

开机14天

| Key_read_requests                 | 2088601666 |

| Key_reads                         | 1685046    |

Key_read_requests/Key_reads=1240

1240个请求只有1个从硬盘读取,其他命中缓存。之前有开机时间长的一次看的数据是2000。

TCMalloc安装

编译MYSQL时,configure时不能有这一个参数 with-mysqld-ldflags=-all-static,否则加载失败。

64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。

CFLAGS=-fPIC ./configure

make CFLAGS=-fPIC

sudo make CFLAGS=-fPIC install

安装google-perftools

./configure

make

sudo make install

设置并更新动态连接库

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr-local-lib.conf

ldconfig

配置mysql启动脚本

sudo vi /usr/local/web/mysql/bin/mysqld_safe

#在:# executing mysqld_safe下加入以下

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

重启mysql后查看是否加载成功

lsof -n | grep tcmalloc

#mysqld 11046 mysql mem REG 72,1 1808415 4693827 /usr/local/lib/libtcmalloc.so.0.0.0

补充

这里有个别人测试的结果:http://www.javayou.com/diary/18368

有人测试成功32位系统静态编译TCMalloc到Mysql,方法是:

要执行的预编译指令

CFLAGS="-O3"

CXX=g++

CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"

在configure时要加入的参数

--with-mysqld-ldflags=-all-static

--with-mysqld-ldflags=-ltcmalloc

#网上都写成了--with-mysqld-ldflags="-all-static -ltcmalloc",结果make错误,分开写没问题

--enable-thread-safe-client

#有人说必须要

这个我没试过,静态编译虽然效率更高,但是感觉兼容性、稳定性会有问题。

2009.10.11

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-10-11 21:59

浏览 1892

论坛回复 / 浏览 (3 / 3251)

评论

3 楼

mathgl

2009-10-15

Mysql的 conn 部分好像还是 thread pool 模型。 这部份的性能提高应该比较明显。

2 楼

lz1130

2009-10-13

ray_linn 写道

有点问题...缓存缓解内存压力? 一般来说缓存缓解的是I/O压力。。。

不太明白你说的。TCMalloc的作用是提高内存分配上的效率和速度。

内存分配快,回收快,程序执行的自然快,在高并发下更为明显。

目前我也还在测试。一切以事实说话,几周后做个对比看看。

1 楼

ray_linn

2009-10-13

有点问题...缓存缓解内存压力? 一般来说缓存缓解的是I/O压力。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值