InnoDB memcached插件vs原生memcached对比性能测试

MySQL 5.6开始支持InnoDB memcached插件,也就是可以通过SQL高效读写memcached里的缓存内容,也支持用原生的memcache协议读写,并且可以实现缓存数据持久化,以及crash recovery、mysql replication、触发器、存储过程等众多特性,详细介绍可以查看:Benefits of the InnoDB / memcached Combination。看起来非常诱人,那就测试下看看吧,是驴子是马拉出来溜溜便知。

  • 环境准备

测试机

DELL PE R710

CPU

E5620  @ 2.40GHz(4 core, 8 threads, L3 Cache 12 MB) * 2

内存

48G(8G * 6)

RAID卡

PERC H700 Integrated, 512MB, BBU, 12.10.1-0001

系统

Red Hat Enterprise Linux Server release 6.4 (Santiago)

内核

2.6.32-358.el6.x86_64 #1 SMP

raid级别

raid 5(10K RPM SAS 300G * 6)

文件系统

xfs

硬盘

10K RPM SAS 300G * 6, 1 hotspare

  • 测试方案

方案一

server端运行InnoDB MC,本地/远程调用memslap执行benchmark

方案二

server端运行Native MC,本地/远程调用memslap执行benchmark

  • 测试脚本

    cat memslap_run.sh #!/bin/sh

    . ~/.bash_profile > /dev/null 2>&1

    cd /home/mc-bench

    exec 3>&1 4>&2 1>> memcache_memslap_${RANDOM}.log 2>&1

    #不断循环 while [ 1 ] do #并发线程数 4 ~ 256 for THREAD in 4 8 16 32 64 128 256 do

    #每种并发测试5次 count=1 max=5 while [ $count -le ${max} ] do #取样 echo "memstat" memstat

    # --flush 每次测试完毕钱,都先清空数据 # --binary 采用binary模式 # 初始化数据: 5000000, 每个并发线程存取数据量: 100000 # 并发256线程时, 总数据量可达 30,600,000 # 未指定 --test 选项,默认是进行 set 测试 memslap --server=mc_server:11211 --concurrency=${THREAD} --execute-number=100000 --initial-load=5000000 --flush --binary

    count=expr ${count} + 1

    #每次测试完毕后,都休息2分钟,等待服务器恢复空负载 if [ ${count} -lt ${max} ] ; then  sleep 120 fi echo "" echo "" done done done

  • 测试结果

1. 写MC

               线程数
耗时

256

128

64

32

16

8

4

NativeMC(单位:1秒)

104.315

47.646

24.486

12.162

6.351

5.525

5.078

InnoDBMC(单位:100秒)

339.1431

68.11128

27.67265

11.26917

4.968556

2.24988

1.104334

直接以曲线图方式对比:

nativemc-vs-innodbmc-benchmark-02-set-result-20130828

nativemc-vs-innodbmc-benchmark-02-set-result-20130828

2. 读MC

        线程数
耗时

4线程并发,2千万记录

本地Native MC

198.5016

本地InnoDB MC

327.239

远程Native MC

846.286

远程InnoDB MC

912.467

曲线图方式对比:

nativemc-vs-innodbmc-benchmark-03-get-result-20130828

nativemc-vs-innodbmc-benchmark-03-get-result-20130828

  • 结论

InnoDB MC看起来很美好,现实很骨感,其并发4线程写数据需呀的耗时,和原生memcached的256线程相当,差的不是一丁半点啊,还有很大优化空间。

而如果是缓存只读,InnoDB MC本地读取的效率大概是原生memcached的2/3,如果是远程读取,则相当于是本地读取效率的1/4 ~ 1/3。

  • 建议应用场景

鉴于上面的测试结果,建议将InnoDB MC这么来用:

1. 数据写入通过触发器(trigger)或者调度器(event scheduler)将待缓存数据同步到InnoDB MC缓存表中;

2. 以memcache API方式,通过本地/远程读取InnoDB MC中的缓存记录;

3. 尽可能减少通过远程方式往InnoDB MC写缓存数据;

--------------------------------------分割线--------------------------------------

知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣、吴炳锡联合推出的专业优质培训品牌,主要有MySQL DBA实战优化和Python运维开发课程,是业内最有良心、最有品质的培训课程。

本文出自 “老叶茶馆” 博客,请务必保留此出处http://imysql.blog.51cto.com/1540006/1879881

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )