虽然经过研究发现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. aviator使用手册在线

    Aviator是一个高性能.轻量级的 java 语言实现的表达式求值引擎, 主要用于各种表达式的动态求值.现在已经有很多开源可用的 java 表达式求值引擎,为什么还需要 Avaitor 呢? Avi ...

  2. DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架

    引言:DDD的困惑 最近,我看到园子里面有位朋友的一篇博客 <领域驱动设计系列(一):为何要领域驱动设计? >文章中有下面一段话,对DDD使用产生的疑问: •没有正确的使用ORM, 导致数 ...

  3. 1 UML基础

    学习设计模式的过程中,发现相关的作者们都会用UML类图来表示一个模式的整体脉络,这种方式确实直观明了,既能体现宏观思路.又能兼顾实现细节.真的是很妙的工具.在开始正式学习设计模式之前,有必要对UML有 ...

  4. 国际化支持(I18N)

    本章译者:@nixil 使用国际化支持(I18N)能够使你的应用根据用户所在地区的不同选择不同的语言.下面介绍如何在引用中使用国际化. 只允许使用UTF-8 Play只支持UTF-8一种字符编码.这是 ...

  5. SQL Server 跨库同步数据

    最近有个需求是要跨库进行数据同步,两个数据库分布在两台物理计算机上,自动定期同步可以通过SQL Server代理作业来实现,但是前提是需要编写一个存储过程来实现同步逻辑处理.这里的存储过程用的不是op ...

  6. 关于HTML面试题汇总之visibility

    一.页面可见性(visibility) 主要提供两个属性,一个事件(都在document对象上):1. 属性:   1.1.  hidden:获取或设置当前页面的可见性,boolean值:   1.2 ...

  7. Javascript实现的2048

    HTML代码如下 <!DOCTYPE html> <html> <head> <title></title> <meta charse ...

  8. Junit单元测试笔记

    什么是单元测试? 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的.很明确的功能是否正确. 单元测试目的? 执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致. 白盒测试和单 ...

  9. 对于Access数据库查询遇到空值的解决办法

    1.Access数据库在office环境下对于null是识别的,但是,在开发环境下,Access数据库对于where xxx is null是不识别的. 2.查询空值解决办法:select * fro ...

  10. 原创:phoenix4.6.0连接hbase1.1.2(不使用phoenix-4.6.0-HBase-1.1-client.jar)

    官网上面的例子是在phoenix-4.6.0-HBase-1.1-client.jar完成的,这个jar包含了phoenix4.6连接hbase1.1.2所有的依赖,真是包罗万象(里面竟然还包括了se ...