作者:丁源 RadonDB 測驗負責人
負責 RadonDB 云資料庫、容器化資料庫的質量性能測驗,迭代驗證,對包括云資料庫以及容器化資料庫性能和高可用方案有深入研究,
|背景
根據 DWorks 2020 年發布的《中國自研資料庫登頂 TPC-C 的意義》[1] 報告顯示,大于 67.9% 的受訪者表示在資料庫選型時會參考 TPC-C 的測驗結果,對用戶來說,性能是資料庫選型時最重要的指標之一,而 TPC-C 作為權威的測驗基準,是一個能夠直觀反映軟硬體性能的方式,

圖片來源:2020 DWorks《中國自研資料庫登頂 TPC-C 的意義》
|幾個概念
一個協會
TPC(事務處理性能協會:Tracsaction Processing Performance Council),是一個大型非盈利的組織,TPC 主要制定了商務應用標準程式(Benchmark)的標準規范,性能和價格度量,并管理測驗結果的發布,任何廠家或測驗者都可以根據規范,執行標準性能測驗,
一個標準
TPC-C 是在線事務處理(OLTP)的基準程式,專門針對聯機事務處理系統(OLTP)的性能測驗規范,其測驗結果可為用戶在選擇相應解決方案平臺時提供參考標準,
一個工具
TPCC-MySQL[2] 是 Percona 基于 TPC-C 衍生出來的標準規范,專門用于 MySQL 基準測驗,可運行于 Windows、GNU/Linux、UNIX 以及 Mac OS 系統之上,
一個場景
TPC-C 有一個比較有代表意義的 OLTP 模擬場景:在線訂單處理系統,
假設有一個大型商品批發商,擁有 N 個位于不同區域的倉庫,每個倉庫負責為 10 個銷售點供貨,每個銷售點有 3000 個客戶,每個客戶平均一個訂單有 10 項產品,由于一個倉庫中不可能 存盤公司所有的貨物,有一些請求必須發往其它倉庫,因此,資料庫在邏輯上是分布的,N 是一個可變引數,測驗者可以隨意改變 N,以獲得最佳測驗效果,
五類事務
該場景下,TPC-C 規范對應五類事務:
| New-Order | 客戶輸入一筆新的訂貨交易 |
|---|---|
| Payment | 更新客戶賬戶余額以反應其支付狀況 |
| Delivery | 發貨(批處理交易) |
| Order-Status | 查詢客戶最近交易的狀態 |
| Stock-Level | 查詢倉庫庫存狀況,以便能夠及時補貨 |
測驗完成后會輸出這五類事務的吞吐量和延遲,而業內關注的 TPC-C 核心性能指標只有兩個:
- New-Order 事務的吞吐量(TPM)
- 延遲
其原因是 TPC 委員會制定 TPC-C 時,重點考量的是 資料庫對新訂單的處理能力,以揭示該資料庫的商業成本,資料庫整體報價 / TPM = 每個訂單的資料庫成本,這個指標對衡量一款資料庫的性價比,具有非常實際的指導作用,

TPC-C 模擬業務場景
接下來將介紹使用 TPC-C 工具模擬業務測驗場景,
|環境準備
作業系統:Ubuntu 18.04.5 LTS
容器平臺:KubeSphere V3.1.1
資料庫:RadonDB MySQL Kubernetes

KubeSphere 界面
環境準備完畢,RadonDB MySQL Kubernetes[3] 已經在 KubeSphere[4] 管理界面可見,
創建測驗 Pod
kubectl run -i --tty --rm --image ubuntu test-shell bash
kubectl exec -ti test-shell -c test-shell /bin/bash
apt-get update
安裝工具
先安裝 make、gcc、git 等工具
apt-get install make
apt-get install gcc
apt-get install git
安裝測驗所需的 MySQL 客戶端和開發環境
apt-get install mysql-server
apt-get install libmysqlclient-dev
原始碼安裝 tpcc-mysql
git clone https://github.com/Percona-Lab/tpcc-mysql.git
cd tpcc-mysql/src
make
|資料準備
真實測驗場景中,倉庫數一般不建議少于 100 個,視服務器硬體配置而定,如果配置了 SSD 或者 PCIE SSD 這種高 IOPS 設備,建議配置倉庫數不低于 1000 個,
創建用戶
創建用戶并授權,
mysql> CREATE USER radondb@localhost IDENTIFIED BY 'mysql_password';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to 'radondb'@'%'identified by 'mysql_password' with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)
創建所需庫表
使用 mysqladmin 工具創建測驗資料庫 tpcc1000,
mysqladmin create tpcc1000 -h server_host -u mysql_user -p mysql_password
tpcc-mysql 工具自帶前面介紹的測驗場景資料表 create_table.sql 檔案、索引檔案 add_fkey_idx.sql 檔案,
mysql -D tpcc1000 -h server_host -u mysql_user -p mysql_password < create_table.sql
mysql -D tpcc1000 -h server_host -u mysql_user -p mysql_password < add_fkey_idx.sql
添加資料
使用 tpcc_load 工具,為指定資料庫添加資料,
./tpcc_load -h server_host -d tpcc1000 -u mysql_user -p mysql_password -w 20
|TPC-C 測驗
開始測驗
執行如下命令,開啟一個測驗案例,
./tpcc_start -h server_host -d tpcc1000 -u mysql_user -p mysql_password -w 20 -c 128 -r 120 -l 200 - >tpcc-output-log
引數說明:
| 引數 | 說明 |
|---|---|
| -w | 指定倉庫數量, |
| -c | 指定并發連接數, |
| -r | 指定開始測驗前進行 warmup 的時間,進行預熱后,測驗效果更好, |
| -l | 指定測驗持續時間, |
| -i | 指定生成報告間隔時長, |
| -f | 指定生成的報告檔案名, |
|測驗結果展示
生成圖表
安裝繪圖工具 gnuplot[5],并生成 tcpp.gif 圖片,
yum install -y gnuplot
cat log.conf | gnuplot

以上就是利用容器 Pod 測驗 RadonDB MySQL 資料庫全部程序,可以嘗試調整測驗條件,獲得更多測驗資料,
|總結
TPC-C 的測驗結果主要參考流量和性價比兩個指標,
流量
Throughput,簡稱 tpmC,按照 TPC 的定義,流量指標描述了系統在執行 Payment、Order-status、Delivery、Stock-Level 這四種交易時,每分鐘處理 New-Order 交易的數量,所有交易的回應時間必須滿足 TPC-C 測驗規范的要求,
流量值越大越好!
性價比
Price/Performance,簡稱 Price/tpmC,即測驗系統價格(指在美國的報價)與流量指標的比值,
性價比越小越好!
|參考參考
[1]:《中國自研資料庫登頂TPC-C的意義》:https://zhuanlan.zhihu.com/p/114152924
[2]:TPCC-MySQL:https://github.com/Percona-Lab/tpcc-mysql
[3]:RadonDB MySQL Kubernetes:https://github.com/radondb/radondb-mysql-kubernetes
[4]:KubeSphere:https://kubesphere.com.cn
[5]:gnuplot:http://www.gnuplot.info
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413164.html
標籤:MySQL
下一篇:Mysql 索引
