数据库性能测试---前阿里数据库团队资深DBA杨奇龙
?
?
楊奇龍
-
前阿里數(shù)據(jù)庫(kù)團(tuán)隊(duì)資深DBA
-
主要負(fù)責(zé)淘寶業(yè)務(wù)線,經(jīng)歷多次11.11,有海量業(yè)務(wù)訪問(wèn)DB架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)。
-
目前就職于有贊科技DBA,負(fù)責(zé)數(shù)據(jù)庫(kù)運(yùn)維工作,熟悉MySQL 性能優(yōu)化,故障診斷,性能壓測(cè),對(duì)NoSQL感興趣,希望與大家多多交流,彼此一起成長(zhǎng)。
?
內(nèi)容摘要
?
-
壓測(cè)方法論
-
為什么要壓測(cè)
-
影響因素
-
統(tǒng)計(jì)的指標(biāo)
-
常用的壓測(cè)工具
-
合理的壓測(cè)平臺(tái)
-
參考
?
這個(gè)是此次分享的大綱,本次分享其實(shí)相對(duì)比較簡(jiǎn)單,偏向于“紙上談兵” 不涉及具體的實(shí)踐操作,沒(méi)有介紹工具如何使用 ,更多是介紹我對(duì)MySQL 壓測(cè)的認(rèn)識(shí),總結(jié)。有什么不妥之處,望各位大牛不吝指導(dǎo)。
?
演講實(shí)錄
?
1壓測(cè)方法論
?
-
壓測(cè)目的
-
壓測(cè)場(chǎng)景/模型
-
結(jié)果分析
-
壓測(cè)報(bào)告
?
其實(shí)可以把每次壓測(cè)當(dāng)作是一個(gè)項(xiàng)目,包括壓測(cè)目的是什么?新版本數(shù)據(jù)庫(kù)上線?新功能? 新的機(jī)型 ?
?
確定壓測(cè)目標(biāo)之后我們要選擇何種壓測(cè)場(chǎng)景進(jìn)行壓測(cè),只讀,只寫(xiě),讀寫(xiě)混合? 觀察壓測(cè)過(guò)程中的性能曲線是否滿足我們的期望,并且真對(duì)性能出現(xiàn)可重復(fù)性抖動(dòng)的問(wèn)題進(jìn)行分析原因并改進(jìn)。
?
壓測(cè)結(jié)束之后,發(fā)布?jí)簻y(cè)報(bào)告。
?
2為什么要壓測(cè)
?
-
測(cè)試數(shù)據(jù)庫(kù)新版本的性能
-
測(cè)試新機(jī)型的性能
-
驗(yàn)證某些DB/OS層面的參數(shù)
-
壓測(cè)新型存儲(chǔ)的性能 某個(gè)廠商的SSD/nVME
-
壓測(cè)某些場(chǎng)景
-
比如cgroup 隔離 ,網(wǎng)卡綁定等等
?
其實(shí)這個(gè)也就是我們壓測(cè)的目的/目標(biāo) ,新的db/機(jī)器/存儲(chǔ)等上線和新技術(shù)預(yù)研,業(yè)務(wù)大促活動(dòng)類(lèi)似于11.11 或者秒殺活動(dòng)等等都是需要提前進(jìn)行壓測(cè)的,評(píng)估數(shù)據(jù)庫(kù)系統(tǒng)的性能容量和業(yè)務(wù)瓶頸,要不訪問(wèn)量過(guò)大導(dǎo)致業(yè)務(wù)癱瘓 就比較麻煩了,失去客戶對(duì)我們產(chǎn)品的信任了。
?
當(dāng)然這個(gè)需求是對(duì)業(yè)務(wù)量相當(dāng)大的時(shí)候必須做的,如果業(yè)務(wù)量極小可以忽略該環(huán)節(jié)。
?
3影響壓測(cè)的因素
?
講完壓測(cè)的目的,我們要討論壓測(cè)過(guò)程中可能會(huì)遇到的問(wèn)題。可能影響整體系統(tǒng)性能的因素大致分為:DB 層面、OS 層面 、存儲(chǔ)層面。
?
-
DB 層面
?
?
對(duì)于MySQL層面,Buffer pool大小事務(wù)寫(xiě)磁盤(pán),binlog落盤(pán)的策略,innodb 層的并發(fā)讀設(shè)置 事務(wù)隔離級(jí)別 默認(rèn)使用rc 都是會(huì)影響到最終的壓測(cè)寫(xiě)入性能表現(xiàn)。
?
-
OS 層面
?
?
關(guān)閉numa 在bios 里面設(shè)置 cpu 為最大性能模式,記得有一兩次是由于設(shè)置為省電模式導(dǎo)致性能出現(xiàn)問(wèn)題。初始化系統(tǒng)的時(shí)候選擇ext4 或者xfs 系統(tǒng)文件。內(nèi)核參數(shù)主要是 tcp 參數(shù),影響業(yè)務(wù)app 和db之間建立網(wǎng)絡(luò)連接。
?
-
存儲(chǔ)層面
?
?
其實(shí)數(shù)據(jù)庫(kù)模型可以分為 io bond 類(lèi)型 和cpu bond 類(lèi)型,估計(jì)大家目前的oltp業(yè)務(wù)系統(tǒng),絕大多數(shù)的業(yè)務(wù)系統(tǒng)屬于 io bond 類(lèi)型,大家的業(yè)務(wù)系統(tǒng)大多數(shù)也是都是用了基于 ssd的存儲(chǔ)結(jié)構(gòu) ,可能采用的raid 模式不一樣有些是raid10 ,有些是raid 5 的差異。
?
在做性能壓測(cè)的時(shí)候需要注意 raid 卡的配置,尤其是讀寫(xiě)策略 WB 模式和WT模式性能差異極大。生產(chǎn)業(yè)務(wù)上注意對(duì)raid卡的充放電,避免導(dǎo)致模式變?yōu)閃T 模式致使性能下降。
?
4需要關(guān)注的指標(biāo)
?
-
DB層
-
QPS ,TPS ,RT(響應(yīng)時(shí)間)
?
對(duì)于db層,我想特別強(qiáng)調(diào)對(duì)rt的監(jiān)控,脫離業(yè)務(wù)場(chǎng)景的壓測(cè)都是耍流氓,很多壓測(cè)報(bào)告都說(shuō)qps,tps 極高,但是沒(méi)有公布對(duì)應(yīng)的rt。大于生產(chǎn)需求的rt 閥值的壓測(cè)結(jié)果都是沒(méi)有用的。
?
比如說(shuō)用戶發(fā)起的一個(gè)業(yè)務(wù)請(qǐng)求,包含20次select,10次dml操作,單條sql,rt 為10ms,應(yīng)用服務(wù)器 和db服務(wù)器網(wǎng)絡(luò)交互 一次同城1ms -2ms,跨城5-15ms,單獨(dú)db的響應(yīng)時(shí)間就30*10=300ms 了,加上app與db的交互和業(yè)務(wù)處理,前端的處理時(shí)間,對(duì)于高并發(fā)的系統(tǒng),吞度量不能接受。
?
-
系統(tǒng)
-
CPU: load,usr cpu,
-
IO : await, svctm, %util
-
網(wǎng)絡(luò): recv , send
?
await:從請(qǐng)求磁盤(pán)操作到系統(tǒng)完成處理,每次請(qǐng)求的平均消耗時(shí)間,包括請(qǐng)求隊(duì)列等待時(shí)間,單位是毫秒(1秒=1000毫秒)
?
%iowait:顯示用于等待I/O操作占用 CPU 總時(shí)間的百分比
?
svctm:平均每次設(shè)備I/O操作的服務(wù)時(shí)間 (毫秒)%util: 一秒中有百分之多少的時(shí)間用于 I/O 操作,或者說(shuō)一秒中有多少時(shí)間 I/O 隊(duì)列是非空的
?
-
工具
-
orzdba vmstat iostat dstat
?
5注意事項(xiàng)
?
-
每輪壓測(cè)彼此避免相互干擾
-
使用orzdba 觀察 uckpt% 等待日志刷新完畢之后再開(kāi)始測(cè)試新一輪。
-
注意壓測(cè)系統(tǒng)的瓶頸
?
我最開(kāi)始的某些壓測(cè)場(chǎng)景沒(méi)有做每次壓測(cè)的隔離,導(dǎo)致上次的壓測(cè)結(jié)果影響了下一次的壓測(cè)性能,致使系統(tǒng)rt不穩(wěn)定。可以通過(guò)orzdba –innodbs 命令查看uckpt% 該參數(shù)表明還有多少日志沒(méi)有被刷新到磁盤(pán)。
?
6常用壓測(cè)工具(開(kāi)源)
?
這里我例舉幾種常見(jiàn)的開(kāi)源數(shù)據(jù)庫(kù)壓測(cè)工具,僅僅講述網(wǎng)上公開(kāi)的how to 資料有很多,大家可以利用谷歌去搜索。
?
-
Sysbench
-
cpu,threads,mutex,memory,fileio,oltp
?
sysbench是一款開(kāi)源的多線程性能測(cè)試工具,可以執(zhí)行CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫(kù)等方面的性能測(cè)試。數(shù)據(jù)庫(kù)目前支持MySQL/Oracle/PostgreSQL。是一款非常受dba 歡迎的壓測(cè)工具。
?
-
Tpcc-mysql
-
MySQL OLTP benchmarking
?
TPC(Tracsaction Processing Performance Council) 事務(wù)處理性能協(xié)會(huì)是一個(gè)評(píng)價(jià)大型數(shù)據(jù)庫(kù)系統(tǒng)軟硬件性能的非盈利的組織,TPC-C是TPC協(xié)會(huì)制定的,用來(lái)測(cè)試典型的復(fù)雜OLTP系統(tǒng)的性能;Tpcc-mysql是percona基于tpcc衍生出來(lái)的產(chǎn)品,專(zhuān)用于mysql基準(zhǔn)測(cè)試,其源碼放在bazaar上,因此需要先安裝bazaar客戶端。值得說(shuō)明的是 Tpcc-mysql 包括五個(gè)處理邏輯,是比較貼近電商平臺(tái)業(yè)務(wù)的一個(gè)壓測(cè)工具New-Order :新訂單 Payment :支付 Order-Status :訂單查詢 Delivery:發(fā)貨 Stock-Level :庫(kù)存。
?
-
mysqlslap
-
MySQL 自帶的壓測(cè)工具 單條SQL
?
mysqlslap是從5.1.4版開(kāi)始的一個(gè)MySQL官方提供的壓力測(cè)試工具。通過(guò)模擬多個(gè)并發(fā)客戶端訪問(wèn)MySQL來(lái)執(zhí)行壓力測(cè)試,同時(shí)提供了比較詳細(xì)的數(shù)據(jù)性能報(bào)告。并且能很好的對(duì)比多個(gè)存儲(chǔ)引擎在相同環(huán)境下的并發(fā)壓力性能差別。通過(guò)mysqlslap –help可以獲得可用的選項(xiàng),個(gè)人覺(jué)得 mysqlslap是所有壓測(cè)軟件中最簡(jiǎn)單的。
?
-
tcpcopy
-
引用線上流量到測(cè)試環(huán)境,模擬真實(shí)壓力
?
TCPCOPY 是一個(gè) tcp 流量的實(shí)時(shí)復(fù)制工具,其1.0版本由網(wǎng)易工程師 @tcpcopy 開(kāi)發(fā)和維護(hù)。一般用來(lái)將生產(chǎn)環(huán)境的線上流量實(shí)時(shí)復(fù)制到測(cè)試環(huán)境進(jìn)行測(cè)試。例如新系統(tǒng)上線前,如果我們希望進(jìn)行一些基本的壓力測(cè)試,那么我們可以直接利用 tcpcopy 來(lái)復(fù)制線上的流量過(guò)來(lái)對(duì)系統(tǒng)進(jìn)行測(cè)試,這樣的好處是測(cè)試數(shù)據(jù)接近真實(shí)水平,且實(shí)施起來(lái)相對(duì)簡(jiǎn)單。下面我們將通過(guò)一個(gè)真實(shí)的使用案例,來(lái)簡(jiǎn)單介紹 tcpcopy 的基本使用方法。我們假定讀者對(duì) tcp 以及路由相關(guān)基本知識(shí)有一定了解。
?
-
Mydbtest
-
樓方鑫的一款壓測(cè)工具,可以去onexsoft下載
?
Mydbtest 估計(jì)很多人沒(méi)有使用過(guò),之前是樓方鑫在支付寶的時(shí)候的一個(gè)壓測(cè)工具,可以根據(jù)業(yè)務(wù)模型 配置業(yè)務(wù)的sql,利用線上的數(shù)據(jù)備份進(jìn)行壓測(cè)的一款工具,推薦大家嘗試使用。
?
7壓測(cè)工具
?
-
Sysbench
-
支持多種目標(biāo)的測(cè)試 缺少業(yè)務(wù)場(chǎng)景支持
?
-
mysqlslap
-
使用方法簡(jiǎn)單,容易上手 測(cè)試方法/場(chǎng)景單一 TPCC 優(yōu)點(diǎn) 業(yè)務(wù)場(chǎng)景固定,能夠模擬商品購(gòu)買(mǎi)流程 缺點(diǎn) 不能代表自己公司業(yè)務(wù)場(chǎng)景。
?
-
tcpcopy
-
真實(shí)的線上壓力,配置復(fù)雜,涉及線上環(huán)境,風(fēng)險(xiǎn)偏大。
?
-
mydbtest
-
定制sql,模擬業(yè)務(wù)訪問(wèn),動(dòng)態(tài)修改,需要先部署好壓測(cè)目標(biāo)庫(kù),基礎(chǔ)工作準(zhǔn)備略多。
?
如ppt上所言,每個(gè)工具各有千秋,大家在壓測(cè)的時(shí)候需要選擇最適合自己業(yè)務(wù)/目的的壓測(cè)工具。不過(guò)我本人推薦使用mydbtest 工具,其足夠靈活性,適配行更強(qiáng)。
?
8面臨的問(wèn)題
?
-
不考慮場(chǎng)景,就是耍流氓
-
難以模擬線上真實(shí)業(yè)務(wù)壓力
-
壓測(cè)模式不夠細(xì)化
-
只讀,只寫(xiě),RW,會(huì)話數(shù),TPCC 能夠模擬五個(gè)業(yè)務(wù)場(chǎng)景
-
不能自動(dòng)化獲取壓測(cè)結(jié)果
?
-
需要人肉處理壓測(cè)數(shù)據(jù) 獲取QPS,TPS 等
?
9更合理的壓測(cè)工具
?
在這里我提出的是一個(gè)設(shè)想,運(yùn)維自動(dòng)化足夠高的公司可以向這個(gè)方向靠近。
?
-
按需定制壓測(cè)計(jì)劃
-
模擬線上生產(chǎn)環(huán)境
-
配置靈活
-
支持分布式壓測(cè)
-
自動(dòng)收集性能數(shù)據(jù)
?
1.1 根據(jù)業(yè)務(wù)需求制定壓測(cè)計(jì)劃
-
壓測(cè)模型
-
模擬各種業(yè)務(wù)類(lèi)型 創(chuàng)建訂單,減庫(kù)存 等等
?
1.2 模擬線上生產(chǎn)環(huán)境
-
數(shù)據(jù)庫(kù)硬件環(huán)境
-
真實(shí)的線上數(shù)據(jù)
-
模擬線上應(yīng)用行為模式
?
1.3 工具配置靈活
-
適配多個(gè)腳本
-
調(diào)整讀寫(xiě)比
讀寫(xiě)比
IUD的比例
-
控制并發(fā)度
-
調(diào)整活躍/非活躍線程比例
-
支持分布式
跨機(jī)房調(diào)用多臺(tái)app server
?
1.4?自動(dòng)收集性能數(shù)據(jù) QPS,TPS,RT
?
?
10總結(jié)
?
?
這個(gè)是之前和葉金榮討論關(guān)于性能壓測(cè)的話題之后整理的思維導(dǎo)圖。具體的地址在http://vdisk.weibo.com/s/dCZasgFETrgn/1445265070,涵蓋數(shù)據(jù)庫(kù)壓測(cè)的所有內(nèi)容。當(dāng)然也有不足之處,歡迎大家給予建議和補(bǔ)充,能夠使數(shù)據(jù)庫(kù)壓測(cè)結(jié)果更精準(zhǔn) ,為數(shù)據(jù)庫(kù)性能/可用性評(píng)估提供有力幫助。
?
關(guān)于參考,這里我強(qiáng)烈推薦 dimitrik 大牛的blog ,里面匯集了各種壓測(cè)場(chǎng)景和技術(shù)分析。
http://dimitrik.free.fr/
http://blog.itpub.net/22664653/viewspace-713075/
http://blog.itpub.net/22664653/viewspace-757735/
http://blog.itpub.net/22664653/viewspace-757506/
http://imysql.com/2012/12/21/pc-server-benchmarking.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/zengkefu/p/5647560.html
總結(jié)
以上是生活随笔為你收集整理的数据库性能测试---前阿里数据库团队资深DBA杨奇龙的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (一)MVC5干货篇,目录和路由
- 下一篇: Redis配置主从数据,实现主从库之间数