首頁 > 軟體

MySQL效能指標TPS+QPS+IOPS壓測

2022-08-04 14:03:17

前言

今天主要介紹MySQL資料庫,或者說所有資料庫的三個關鍵效能指標TPSQPSIOPS

1. 效能指標概覽

QPS(Queries Per Second)就是每秒的查詢數,對資料庫而言就是資料庫每秒執行的 SQL 數(含 insert、select、update、delete 等)。
TPS(Transactions Per Second)就是每秒的事務數。TPS 對於資料庫而言就是資料庫每秒執行的事務數,以 commit 成功次數為準。
IOPS 每秒磁碟進行的I/O操作次數

2. 指標計算方式

2.1 TPS

適用innodb Transactions Per Second(每秒傳輸的事物處理個數),即伺服器每秒處理的事務數
一般的,評價系統效能均以每秒鐘完成的技術交易的數量來衡量。系統整體處理能力取決於處理能力最低模組的TPS值

mysql> SHOW GLOBAL STATUS LIKE 'Com_commit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_commit    | 22402 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SHOW GLOBAL STATUS LIKE 'Com_rollback';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_rollback  | 0     |
+---------------+-------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'Uptime'
    -> ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 3319  |
+---------------+-------+
1 row in set (0.01 sec)
TPS=(Com_commit + Com_rollback)/Uptime

2.2 QPS

同時適用與InnoDB和MyISAM 引擎 每秒查詢率QPS是對一個特定的查詢伺服器在規定時間內所處理流量多少的衡量標準 對應fetches/sec,即每秒的響應請求數,也即是最大吞吐能力

2.3 IOPS

IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數),是衡量磁碟效能的主要指標之一。IOPS是指單位時間內系統能處理的I/O請求數量,一般以每秒處理的I/O請求數量為單位,I/O請求通常為讀或寫資料操作請求。隨機讀寫頻繁的應用,如OLTP(Online Transaction Processing),IOPS是關鍵衡量指標。另一個重要指標是資料吞吐量(Throughput),指單位時間內可以成功傳輸的資料數量。對於大量順序讀寫的應用,如VOD(Video On Demand),則更關注吞吐量指標。 IOPS可細分為如下幾個指標: Toatal IOPS,混合讀寫和順序隨機I/O負載情況下的磁碟IOPS,
這個與實際I/O情況最為相符,大多數應用關注此指標。
Random Read IOPS,100%隨機讀負載情況下的IOPS。
Random Write IOPS,100%隨機寫負載情況下的IOPS。
Sequential Read IOPS,100%順序負載讀情況下的IOPS。
Sequential Write IOPS,100%順序寫負載情況下的IOPS。
IOPS的測試benchmark工具主要有Iometer, IoZone, FIO等,可以綜合用於測試磁碟在不同情形下的IOPS。對於應用系統,需要首先確定資料的負載特徵,然後選擇合理的IOPS指標進行測量和對比分析,據此選擇合適的儲存媒介和軟體系統。

理論上可以計算出磁碟的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略資料傳輸時間。假設磁碟平均物理尋道時間為3ms, 磁碟轉速為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. mysqlslap

3.1 壓測

mysqlslap 是 MySQL 自帶的一個用於實現負載效能測試和壓力測試的工具。它可以模擬多個使用者端對資料庫進行施壓,並生成報告來了解資料庫的效能狀況。
mysqlslap 的執行過程主要分三步:
① 建立庫、表,匯入資料用於測試。此過程由單執行緒完成。
② 開始進行壓力測試。該步驟可以使用多執行緒完成。
③ 清理測試資料。此過程由單執行緒完成。

[root@jeames ~]# mysqlslap --help 

3.2 案例

mysqlslap -uroot -proot -h192.168.1.54 -P3306 
--create-schema=mysqlslap --auto-generate-sql 
--auto-generate-sql-load-type=mixed 
--concurrency=100,200 --number-of-queries=1000 
--iterations=10 --number-int-cols=7 
--number-char-cols=13 --auto-generate-sql-add-autoincrement

Benchmark
#執行所有語句的平均時間,單位秒
Average number of seconds to run all queries: 0.018 seconds
#執行所有語句的最小秒數
Minimum number of seconds to run all queries: 0.018 seconds
#執行所有語句的最大秒數
Maximum number of seconds to run all queries: 0.018 seconds
#使用者端數量
Number of clients running queries: 1
#每個使用者端執行查詢的平均數
Average number of queries per client: 0

該語句表示測試並行為 100 和 200 的情況,進行 1000 次存取(該值一般這樣預估出來:並行客戶數×每客戶查詢次數)。這樣的測試方法迭代 10 次,最終顯示最大、
最小、平均值
其中:--debug-info,代表要額外輸出 CPU 以及記憶體的相關資訊。如果報錯 Option 'debug-info' used, but is disabled 請取消 debug-info 引數
-number-int-cols=7 表示生成的表中必須有 7 個 int 型別的列
-number-char-cols=13 表示生成的表中必須有 13 個 char 型別的列
-concurrency 代表並行數量,多個可以用逗號隔開,concurrency=10,50,100, 並行連線執行緒數分別是 10、50、100 個並行。
--engines 代表要測試的引擎,可以有多個,用分隔符隔開。
--iterations 代表要執行這些測試多少次。
--auto-generate-sql 代表用系統自己生成的 SQL 指令碼來測試。
--auto-generate-sql-load-type 代表要測試的是讀還是寫還是兩者混合的(read,write,update,mixed)
--number-of-queries 代表總共要執行多少次查詢。每個客戶執行的查詢數量可以用查詢總數/並行數來計算。
--debug-info 代表要額外輸出 CPU 以及記憶體的相關資訊。
--number-int-cols :建立測試表的 int 型欄位數量
--auto-generate-sql-add-autoincrement : 代表對生成的表自動新增 auto_increment 列,從 5.1.18 版本開始
--number-char-cols 建立測試表的 char 型欄位數量。
--create-schema 測試的 schema,MySQL 中 schema 也就是 database。
--query 使用自定義指令碼執行測試,例如可以呼叫自定義的一個儲存過程或者 sql 語句來執行測試。
--only-print 檢視語句做了什麼。

到此這篇關於MySQL效能指標TPS+QPS+IOPS壓測的文章就介紹到這了,更多相關MySQL效能指標壓測內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com