tcmalloc的算法优化了glibc的malloc等内存分配函数,通过预分配大内存然后分割来避免内存碎片,同时提高内存分配效率,使用场景为多线程,大内存操作
mysql使用tcmalloc可以提高线程池分配新线程,线程对内存的malloc和free,提高dml的效率(select 的影响不如dml明显,一方面有qcache的存在,另一方面dml作用于buffer,然后buffer根据lru算法flush更加频繁)
安装tcmalloc
1) 安装libunwind 0.99
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
2) 安装tcmalloc
./configure
make&&make install
3) 添加到LD_LIBRARY_PATH
#cd /etc/ld.so.conf.d/
#echo "/usr/local/lib">local_lib.conf
#ldconfig
5.5 之前的mysql调整/etc/init.d/mysql 或者mysqld_safe
添加 export LD_PRELOAD=/usr/lib/libtcmalloc.so /* 或者编译后的位置 */
5.5 还可以在my.cnf添加参数
[mysqld_safe]
malloc-lib=tcmalloc
启动mysql #lsof -n | grep -i tcmalloc 查看是否已加载
3) mysql使用tcmalloc和glibc malloc的性能对比
场景为500并发的 标准tpc-b 测试,结果为
使用前
Statistics for the Userload:
User Load TPS kBPS Avg. Response Time (sec) Avg. Transaction Time (sec) Total Executions Total Rows Total Errors
500 390.92 3.127 0.098 0.101 70255 70255 0
使用后
Statistics for the Userload:
User Load TPS kBPS Avg. Response Time (sec) Avg. Transaction Time (sec) Total Executions Total Rows Total Errors
500 462.76 3.702 0.163 0.168 83237 83237 0
tps从390->462,提高18%
阅读(1986) | 评论(0) | 转发(0) |