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
CPUE5620  @ 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

               線程數
耗時
25612864321684
NativeMC(單位:1秒)104.31547.64624.48612.1626.3515.5255.078
InnoDBMC(單位:100秒)339.143168.1112827.6726511.269174.9685562.249881.104334

直接以曲線圖方式對比:

 

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

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

2. 讀MC

        線程數
耗時
4線程併發,2千萬記錄
本地Native MC198.5016
本地InnoDB MC327.239
遠程Native MC846.286
遠程InnoDB MC912.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運維開發課程,是業內最有良心、最有品質的培訓課程。

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