InnoDB memcached插件 vs 原生memcached對比性能測試

InnoDB memcached插件 vs 原生memcached對比性能測試


轉載自: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


  • 測試腳本

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


直接以曲線圖方式對比:

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寫緩存數據;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章