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

本文涉及的产品
性能测试 PTS,5000VUM额度
简介:

转载自:http://imysql.cn/2013/08/15/innodb-memcached-vs-native-memcached-benchmark.shtml


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


  • 测试脚本

1
cat  memslap_run.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/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


直接以曲线图方式对比:

http://wp.imysql.com/wp-content/uploads/2013/08/02-result-set-20130828.png

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


曲线图方式对比:

http://wp.imysql.com/wp-content/uploads/2013/08/03-result-get-20130828.png

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写缓存数据;
















本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1641009,如需转载请自行联系原作者



相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
2月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
154 0
|
4月前
|
JSON Dubbo 测试技术
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
58 2
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
|
4月前
|
机器学习/深度学习 人工智能 算法
探索软件测试的未来:自动化与AI的融合之路移动应用开发的新纪元:从原生到跨平台
【8月更文挑战第27天】在软件开发的世界中,测试是确保产品质量的关键步骤。随着技术的不断进步,传统的手动测试方法正逐渐被自动化和人工智能(AI)技术所取代。本文将探讨自动化测试的现状与挑战,并展望未来AI如何重塑软件测试领域,同时提供实用的代码示例,引领读者一窥自动化测试的未来趋势。
|
4月前
|
存储 SQL 测试技术
单元测试问题之JCode5插件在项目中的实际应用效果如何解决
单元测试问题之JCode5插件在项目中的实际应用效果如何解决
95 3
|
4月前
|
JSON 测试技术 数据格式
单元测试问题之使用JCode5插件生成测试类如何解决
单元测试问题之使用JCode5插件生成测试类如何解决
159 3
|
4月前
|
缓存 关系型数据库 MySQL
【缓存大对决】Memcached VS MySQL查询缓存,谁才是真正的性能之王?
【8月更文挑战第24天】在现代Web应用中,缓存技术对于提升性能与响应速度至关重要。本文对比分析了Memcached与MySQL查询缓存这两种常用方案。Memcached是一款高性能分布式内存对象缓存系统,支持跨服务器共享缓存,具备灵活性与容错性,但受限于内存大小且不支持数据持久化。MySQL查询缓存内置在MySQL服务器中,简化了缓存管理,特别适用于重复查询,但功能较为单一且扩展性有限。两者各有所长,实际应用中可根据需求单独或结合使用,实现最佳性能优化。
133 0
|
5月前
|
测试技术 PHP 开发者
原生php单元测试示例
通过上面的示例,我们可以看到,即使在缺乏专门测试框架的情况下,使用原生PHP代码进行基本的单元测试也是完全可行的。当然,对于更复杂的项目,利用像PHPUnit这样的专业工具将带来更多的便利和高级功能。不过,理解单元测试的基本概念和能够手工编写测试是每个PHP开发者的宝贵技能。
37 4
|
5月前
|
运维 监控 测试技术
Golang质量生态建设问题之接入并使用Go单元测试插件的问题如何解决
Golang质量生态建设问题之接入并使用Go单元测试插件的问题如何解决
|
5月前
|
测试技术 PHP 开发者
原生php单元测试示例
通过上面的示例,我们可以看到,即使在缺乏专门测试框架的情况下,使用原生PHP代码进行基本的单元测试也是完全可行的。当然,对于更复杂的项目,利用像PHPUnit这样的专业工具将带来更多的便利和高级功能。不过,理解单元测试的基本概念和能够手工编写测试是每个PHP开发者的宝贵技能。
24 1