mysql单库tps_MySQL数据库三个关键性能指标--TPS\QPS\IOPS
今天主要介紹MySQL數(shù)據(jù)庫,或者說所有數(shù)據(jù)庫的三個關(guān)鍵性能指標:
qps 每秒處理的查詢數(shù)
tps 每秒處理的事務(wù)數(shù)
IOPS 每秒磁盤進行的I/O操作次數(shù)
一、TPS(適用innodb)
1. 概念
Transactions Per Second(每秒傳輸?shù)氖挛锾幚韨€數(shù)),即服務(wù)器每秒處理的事務(wù)數(shù)。
TPS包括一條消息入和一條消息出,加上一次用戶數(shù)據(jù)庫訪問。(業(yè)務(wù)TPS = CAPS × 每個呼叫平均TPS)
TPS是軟件測試結(jié)果的測量單位。一個事務(wù)是指一個客戶機向服務(wù)器發(fā)送請求然后服務(wù)器做出反應(yīng)的過程??蛻魴C在發(fā)送請求時開始計時,收到服務(wù)器響應(yīng)后結(jié)束計時,以此來計算使用的時間和完成的事務(wù)個數(shù)。
一般的,評價系統(tǒng)性能均以每秒鐘完成的技術(shù)交易的數(shù)量來衡量。系統(tǒng)整體處理能力取決于處理能力最低模塊的TPS值。
2. TPS計算
(1) 方法一
Com_commit=SHOWGLOBAL?STATUS?LIKE?'Com_commit';
Com_rollback=SHOWGLOBAL?STATUS?LIKE?'Com_rollback';
Uptime=SHOWGLOBAL?STATUS?LIKE?'Uptime';
TPS=(Com_commit?+?Com_rollback)/Uptime
(2) 方法二
use?information_schema;
select?VARIABLE_VALUE?into?@num_com?from?GLOBAL_STATUS?where?VARIABLE_NAME='COM_COMMIT';
select?VARIABLE_VALUE?into?@num_roll?from?GLOBAL_STATUS?where?VARIABLE_NAME='COM_ROLLBACK';
select?VARIABLE_VALUE?into?@uptime?from?GLOBAL_STATUS?where?VARIABLE_NAME='UPTIME';
select?(@num_com+@num_roll)/@uptime;
二、QPS(同時適用與InnoDB和MyISAM 引擎 )
1. 概念
每秒查詢率QPS是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)所處理流量多少的衡量標準,在因特網(wǎng)上,作為域名系統(tǒng)服務(wù)器的機器的性能經(jīng)常用每秒查詢率來衡量。
對應(yīng)fetches/sec,即每秒的響應(yīng)請求數(shù),也即是最大吞吐能力。
2. QPS計算
(1) 方法一
Questions=SHOWGLOBAL?STATUS?LIKE?'Questions';
Uptime=SHOWGLOBAL?STATUS?LIKE?'Uptime';
QPS=Questions/Uptime
(2) 方法二
use?information_schema;
select?VARIABLE_VALUE?into?@num_queries?from?GLOBAL_STATUS?where?VARIABLE_NAME='QUESTIONS';
select?VARIABLE_VALUE?into?@uptime?from?GLOBAL_STATUS?where?VARIABLE_NAME='UPTIME';
select?@num_queries/@uptime;
三、IOPS
1. 概念
IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數(shù)),是衡量磁盤性能的主要指標之一。IOPS是指單位時間內(nèi)系統(tǒng)能處理的I/O請求數(shù)量,一般以每秒處理的I/O請求數(shù)量為單位,I/O請求通常為讀或?qū)憯?shù)據(jù)操作請求。隨機讀寫頻繁的應(yīng)用,如OLTP(Online Transaction Processing),IOPS是關(guān)鍵衡量指標。另一個重要指標是數(shù)據(jù)吞吐量(Throughput),指單位時間內(nèi)可以成功傳輸?shù)臄?shù)據(jù)數(shù)量。對于大量順序讀寫的應(yīng)用,如VOD(Video On Demand),則更關(guān)注吞吐量指標。
傳統(tǒng)磁盤本質(zhì)上一種機械裝置,如FC,SAS,SATA磁盤,轉(zhuǎn)速通常為5400/7200/10K/15K rpm不等。影響磁盤的關(guān)鍵因素是磁盤服務(wù)時間,即磁盤完成一個I/O請求所花費的時間,它由尋道時間、旋轉(zhuǎn)延遲和數(shù)據(jù)傳輸時間三部分構(gòu)成。
尋道時間Tseek是指將讀寫磁頭移動至正確的磁道上所需要的時間。尋道時間越短,I/O操作越快,目前磁盤的平均尋道時間一般在3-15ms。
旋轉(zhuǎn)延遲Trotation是指盤片旋轉(zhuǎn)將請求數(shù)據(jù)所在扇區(qū)移至讀寫磁頭下方所需要的時間。旋轉(zhuǎn)延遲取決于磁盤轉(zhuǎn)速,通常使用磁盤旋轉(zhuǎn)一周所需時間的1/2表示。比如,7200 rpm的磁盤平均旋轉(zhuǎn)延遲大約為60*1000/7200/2 = 4.17ms,而轉(zhuǎn)速為15000 rpm的磁盤其平均旋轉(zhuǎn)延遲約為2ms。
數(shù)據(jù)傳輸時間Ttransfer是指完成傳輸所請求的數(shù)據(jù)所需要的時間,它取決于數(shù)據(jù)傳輸率,其值等于數(shù)據(jù)大小除以數(shù)據(jù)傳輸率。目前IDE/ATA能達到133MB/s,SATA II可達到300MB/s的接口數(shù)據(jù)傳輸率,數(shù)據(jù)傳輸時間通常遠小于前兩部分時間。
IOPS可細分為如下幾個指標:
Toatal IOPS,混合讀寫和順序隨機I/O負載情況下的磁盤IOPS,這個與實際I/O情況最為相符,大多數(shù)應(yīng)用關(guān)注此指標。
Random Read IOPS,100%隨機讀負載情況下的IOPS。
Random Write IOPS,100%隨機寫負載情況下的IOPS。
Sequential Read IOPS,100%順序負載讀情況下的IOPS。
Sequential Write IOPS,100%順序?qū)懾撦d情況下的IOPS。
IOPS的測試benchmark工具主要有Iometer, IoZone, FIO等,可以綜合用于測試磁盤在不同情形下的IOPS。對于應(yīng)用系統(tǒng),需要首先確定數(shù)據(jù)的負載特征,然后選擇合理的IOPS指標進行測量和對比分析,據(jù)此選擇合適的存儲介質(zhì)和軟件系統(tǒng)。
2. IOPS計算
理論上可以計算出磁盤的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略數(shù)據(jù)傳輸時間。假設(shè)磁盤平均物理尋道時間為3ms, 磁盤轉(zhuǎn)速為7200,10K,15K rpm,則磁盤IOPS理論最大值分別為,
IOPS = 1000 / (3 + 60000/7200/2) = 140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200
3. 案例
需求:20TB存儲空間同時滿足4500 IOPS+RAID 5,我應(yīng)該如何計算?RAID 5或者RAID 1/0的時候分別需要多少塊硬盤?
首先需要知道I/O中讀操作(Read)與寫操作(Write)所占的百分比。然后通過下列公式,將主機的IOPS需求轉(zhuǎn)換成硬盤實際IOPS負載:
假定4500 IOPS中讀/寫比是2:1,則不同RAID類型Drive IOPS要求分別如下:
RAID?1/0:?(2/3)*4500?+?2*(1/3)*4500=6000IOPS
RAID?5:?(2/3)*4500?+?4*(1/3)*4500=9000IOPS
RAID?6:?(2/3)*4500?+?6*(1/3)*4500=12000IOPS
再參照下表中不同類型硬盤單塊IOPS參數(shù),得出需要多少塊硬盤:
假定選用FC 15K RPM硬盤,則:
RAID?1/0:?6000/180=34塊
RAID?5:?9000/180=50塊
RAID?6:?12000/180=67塊
注:實際情況下還需考慮Vault Drivers (共5塊)以及Hot Spares (建議每30塊硬盤一個)。
最后,如果選用600GB FC硬盤來實現(xiàn)20TB可用空間,則RAID 1/0需要78塊,RAID 5需要42塊。
【編輯推薦】
【責任編輯:趙寧寧 TEL:(010)68476606】
點贊 0
總結(jié)
以上是生活随笔為你收集整理的mysql单库tps_MySQL数据库三个关键性能指标--TPS\QPS\IOPS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python心跳的实现_(python)
- 下一篇: delete 字符数组 []_前端基础扫