mysql性能测试(使用TCMalloc前后对比)

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


今天动手测试了一下TCMalloc对mysql的影响,以下是我测试的流水过程:
硬件:
CPU:Intel(R) Xeon(R) CPU 5110@1.60GHz(四核心)
MEMORY:4G

软件:
OS:CentOS release 5.3 (Final)
MySQL edition:5.5.12-log

测试工具: 

sysbench 

tpcc(暂缺)

 

mysql相关参数:

sync_binlog=1
transaction-isolation=READ-COMMITTED
innodb_buffer_pool_size = 2500M
innodb_thread_concurrency = 9
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 400

 

为了避免块设备的IO瓶颈,数据基本上全部在内存中读取 。

 装载1kw条记录:

# sysbench --test=oltp --db-driver=mysql  --mysql-user=root --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-socket=/tmp/mysql.sock --mysql-table-engine=innodb --oltp-table-size=10000000 prepare

安装TCMalloc: 

# tar -zxvf google-perftools-1.7.tar.gz 
# cd google-perftools-
1.7 
# mkdir /tmp/tc 
# ./configure --prefix
=/tmp/tc --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal 
# make && make install   --编译报错,说没有g++
# yum install gcc-c++ libstdc++-devel 
# cp /tmp/tc/lib/libtcmalloc_minimal.so
.0.1.0  /usr/local/lib
# ln -s /usr/local/lib/libtcmalloc_minimal.so
.0.1.0 /usr/local/lib/libtcmalloc.so
# ln -s /usr/local/lib/libtcmalloc_minimal.so
.0.1.0 /usr/local/lib/libtcmalloc.so.0 
# ln -s /usr/local/lib/libtcmalloc_minimal.so
.0.1.0 /usr/local/lib/libtcmalloc.so.0.1.0


"Mysql加入动态库
修改mysql服 务的启动脚本mysqld_safe,在“ # executing mysqld_safe”行后添加行:
export LD_PRELOAD="/usr/local/lib/libtcmalloc.so"
目的是在启动mysql前, 加载tcmalloc动态库。
重启Mysql服 务:
/usr/local/mysql/bin/mysqladmin shutdown
/usr/local/mysql/bin/mysqld_safe –user=mysql &
 
验证TCMalloc
使用lsof查看mysql进 程是否已经加载了tcmalloc库:"
#  lsof -n | grep tcmalloc

mysqld    10472     mysql  mem       REG              253,0      873557   15970541 /usr/local/lib/libtcmalloc_minimal.so.0.1.0 

 

sysbench运行语句:

# time sysbench --test=oltp --db-driver=mysql  --mysql-user=root --mysql-host=127.0.0.1 --mysql-socket=/tmp/mysql.sock --mysql-table-engine=innodb --mysql-db=sbtest --num-threads=[1...64] --max-requests=10000  --oltp-read-only=on  --oltp-table-size=10000000 run 

 

测试结果如下:

横轴为并发线程数

纵轴为每秒完成的事务量(只读) 

tcmalloc

从文档中得知,TCmalloc的从两个地方改善性能:

一是执行一次malloc/free的速度;

二是减少了多线程程序中的锁争用情况。对于小对象,几乎已经达到了零争用。对于大对象,TCMalloc尝试使用粒度较好和有效的自旋锁。


参考:

http://code.google.com/p/google-perftools/ 

http://my.oschina.net/captaintheron/blog/2797 

http://shiningray.cn/tcmalloc-thread-caching-malloc.html 

posted @ 2011-05-11 16:18  番茄侠  阅读(815)  评论(0编辑  收藏  举报