您好,欢迎访问一九零五行业门户网

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

mysql 5.6开始支持innodb memcached插件,也就是可以通过sql高效读写memcached里的缓存内容,也支持用原生的memcache协议读写,并且可以实现缓存数据持久化,以及crash recovery、mysql replication、触发器、存储过程等众多特性,详细介绍可以查看:benefit
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>&1cd /home/mc-benchexec 3>&1 4>&2 1>> memcache_memslap_${random}.log 2>&1#不断循环while [ 1 ]do#并发线程数 4 ~ 256for thread in 4 8 16 32 64 128 256do#每种并发测试5次count=1max=5while [ $count -le ${max} ]do#取样echo memstatmemstat# --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 --binarycount=`expr ${count} + 1`#每次测试完毕后,都休息2分钟,等待服务器恢复空负载if [ ${count} -lt ${max} ] ; then sleep 120fiecho echo donedonedone
测试结果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
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
结论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写缓存数据;
原文地址:innodb memcached插件vs原生memcached对比性能测试, 感谢原作者分享。
其它类似信息

推荐信息