虽然经过研究发现TCMalloc不适合我们现有的游戏框架,但意外收获发现TCMalloc可以大幅度提高MYSQL 性能及内存占用,这里给出配置及测试的结果:

1.配置

关于TCMalloc的安装,在《Google perftools 安装手记(TCMalloc)》 一文中已经详细给出,下面给出将TCMalloc配置到MYSQL的步骤:

1.1 修改MySQL启动脚本(依据MySQL安装位置):

 vi /usr/local/mysql/bin/mysqld_safe
  在# executing mysqld_safe的下一行,添加:
 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
 保存退出,并重启MySQL

1.2 依据lsof验证命令查看TCMalloc是否起效:

 # lsof |grep -i libtcmalloc.so
 如果发现以下信息,说明tcmalloc已经起效:
 mysqld     mysql  mem    REG  ,       /usr/local/lib/libtcmalloc.so.4.1.

2.性能测试工具sysbench

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下操作都将以支持MySQL数据库为例进行。sourceforge已挂,下载地址:http://download.csdn.net/detail/chen19870707/8060033,安装步骤如下:

 tar zxf sysbench-0.4..tar.gz
cd sysbench-0.4.
./configure && make && make install
strip /usr/local/bin/sysbench

  选项说明参考:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html

3.性能分析:

  数据准备:
 sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size= --max-requests= --num-threads= --mysql-host=127.0.0.1 --mysql-port= --mysql-user=root --mysql-password=root --mysql-db=test --mysql-socket=/tmp/mysql.sock prepare

  性能测试:

 sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size= --max-requests= --num-threads= --mysql-host=127.0.0.1  --mysql-port= --mysql-user=root --mysql-password=root --mysql-db=test --mysql-socket=/tmp/mysql.sock run >> report.txt

  数据清理:

 /usr/local/bin/sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size= --max-requests= --num-threads= --mysql-host=127.0.  --mysql-port= --mysql-user=root --mysql-password=root --mysql-db=test --mysql-socket=/tmp/mysql.sock cleanup

  参数说明:

 --oltp-table-size=N         测试表的记录数。默认是10000 --max-requests=N           limit for total number of requests [] #请求的最大数目。默认为10000,0代表不限制。
--max-requests=N limit for total number of requests [] #请求的最大数目。默认为10000,0代表不限制。
--num-threads=N number of threads to use [] #创建测试线程的数目。默认为1.
--mysql-host=[LIST,...] MySQL server host [localhost]
--mysql-port=N MySQL server port []
--mysql-password=STRING MySQL password []
--mysql-db=STRING MySQL database name [sbtest]
--mysql-socket=STRING MySQL socket

  测试结果:

未使用TCMalloc

OLTP test statistics: 
    queries performed: 
        read:                            140112 
        write:                           50019 
        other:                           20008 
        total:                           210139 
    transactions:                        10000  (756.11 per sec.) 
    deadlocks:                           8      (0.60 per sec.) 
    read/write requests:                 190131 (14376.02 per sec.) 
    other operations:                    20008  (1512.83 per sec.)

Test execution summary: 
    total time:                          13.2256s 
    total number of events:              10000 
    total time taken by event execution: 211.4342 
    per-request statistics: 
         min:                                  2.96ms 
         avg:                                 21.14ms 
         max:                                423.52ms 
         approx.  95 percentile:     56.25ms

使用TCMalloc

OLTP test statistics: 
    queries performed: 
        read:                            140084 
        write:                           50017 
        other:                           20006 
        total:                           210107 
    transactions:                        10000  (862.83 per sec.) 
    deadlocks:                           6      (0.52 per sec.) 
    read/write requests:                 190101 (16402.39 per sec.) 
    other operations:                    20006  (1726.17 per sec.)

Test execution summary: 
    total time:                          11.5898s 
    total number of events:              10000 
    total time taken by event execution: 185.2397 
    per-request statistics: 
         min:                                  2.81ms 
         avg:                                 18.52ms 
         max:                                430.03ms 
         approx.  95 percentile:              36.49ms

可以看到使用TCMalloc性能明显优于未使用,这里主要原因是mysql是多线程小内存分配,TCMalloc由于每个线程均有线程缓冲区,所以对这样的小对象分配无竞争,效率非常好,可以看到TCMalloc对MYSQL优化效果不错 ,建议使用。

TCMalloc 对MYSQL 性能 优化的分析的更多相关文章

  1. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  2. MySQL性能优化的21个最佳实践

    http://www.searchdatabase.com.cn/showcontent_38045.htm MySQL性能优化的21个最佳实践 1. 为查询缓存优化你的查询 大多数的MySQL服务器 ...

  3. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  4. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  5. mysql 性能优化方向

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. MySQL性能优化总结

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  7. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  8. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  9. mysql 性能优化方案1

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

随机推荐

  1. jQuery选择器。 5.21 《深夜还在编码的你》

    (之所以字体弄那么大是因为省眼,程序员不容易,程序员的眼睛更不容易,请保护我们的眼睛) 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器. 熟练地使用选 ...

  2. Bootstrap源码分析之dropdown

    源码分析: Dropdowns.scss:下拉框模块 Javascripts/bootstrap/dropdown.js:实现下拉框响应 实现功能及原理: 下拉选项卡,默认不能实现显示选中项的功能 原 ...

  3. 分享5种风格的 jQuery 分页效果【附代码】

    jPaginate 是一款非常精致的分页插件,提供了五种不同风格的分页效果,支持鼠标悬停翻页,快速分页功能.这款插件还提供了丰富的配置选项,你可以根据需要进行设置. 效果演示      源码下载 各个 ...

  4. Mysql一些复杂的语句

    1.查找重复的行 SELECT * FROM blog_user_relation a WHERE (a.account_instance_id,a.follow_account_instance_i ...

  5. 使用Reaver对WPS加密网络进行暴力破解

    WPS状态探测 探测开启了WPS功能的AP,WPS Locked状态为NO的表示开启了WPS功能. wash -i wlan0mon PIN码获取 reaver -i wlan0mon -b MAC地 ...

  6. 【Leafletjs】5.L.Control 自定义一个Control

    L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...

  7. iOS开发之图片分辨率与像素对齐

    像素对齐的概念 在iOS中,有一个概念叫做像素对齐,如果像素不对齐,那么在GPU渲染时,需要进行插值计算,这个插值计算的过程会有性能损耗. 在模拟器上,有一个选项可以把像素不对齐的部分显示出来.  ...

  8. Mac电脑清理硬盘"其他"

    作为一个MacBook的使用者,无不感受到苹果对于系统和硬件的完美匹配. 苹果电脑不适合玩游戏,所以我只用它开发iOS使用.电脑里除了Xcode和常用办公软件与通讯软件以外,我没有装其他的任何大应用. ...

  9. Android 应用程序的反编译

    1.ApkTool工具 安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件.安装环境:需要安装JRE1.61> 到http://code.google.com/p/an ...

  10. 转载:设置html页面不让浏览器缓存的方法

    本文是转载文章,只是方便自己记录. 在html页面head标签之间添加以下标识可以避免大多数浏览器缓存: <meta http-equiv="Pragma" content= ...