測試方法
更新時間 2025-07-30 16:45:14
最近更新時間: 2025-07-30 16:45:14
分享文章
本頁主要介紹關系數據庫MySQL版的性能測試方法。
前提條件
測試環境
測試使用ECS和RDS實例均在同一地域、同一可用區。所有測試在西南1資源池完成。
測試使用ECS和RDS實例在同一VPC內。
測試使用ECS信息:
規格為s8.4xlarge.2
鏡像為CentOS 7.9
測試使用RDS信息:
規格為通用計算增強型C7下各規格、存儲類型為超高IO數據盤500G;
通用計算增強型C8下各規格、存儲類型為XSSD-1數據盤500G;
參數模板均為RDS默認參數模板。
說明
1.ECS規格較高是為了保證測試時性能瓶頸不在ECS端。
2.RDS數據盤大小涉及IOPS及IO吞吐量上限,需確保容量符合IO能力要求。
測試工具
Sysbench工具
Sysbench是一個跨平臺且支持多線程的模塊化基準測試工具,用于評估系統在運行高負載的數據庫時相關核心參數的性能表現。
本次測試使用的Sysbench版本為1.0.20。
表1 Sysbench參數說明
| 參數 | 說明 |
|---|---|
| db-driver | 數據庫引擎。 |
| mysql-host | RDS實例連接地址。 |
| mysql-port | RDS實例連接端口。 |
| mysql-user | RDS實例賬號。 |
| mysql-password | RDS實例賬號對應的密碼。 |
| mysql-db | RDS實例用于測試的數據庫名。 |
| table_size | 測試表大小。 |
| tables | 測試表數量。 |
| events | 測試請求數量。 |
| time | 測試時間。 |
| threads | 測試并發線程數。 |
| percentile | 需要統計的百分比,默認值為95%,即請求在95%的情況下的執行時間。 |
| report-interval | 測試進度報告輸出頻率,表示N秒輸出一次測試進度報告。 |
| skip-trx | 是否跳過事務。1:跳過0:不跳過 |
安裝方法
ECS實例執行如下命令安裝Sysbench。
sudo yum install gcc gcc-c++ autoconf automake make libtool mysql-devel git mysql
git clone //github.com/akopytov/sysbench.git #下載Sysbench
cd sysbench #打開sysbench目錄
git checkout 1.0.20 #切換到sysbench 1.0.20版本
./autogen.sh1.0.20 #運行autogen.sh
./configure --prefix=/usr --mandir=/usr/share/man
make #編譯
make installECS執行如下命令調整ulimit限制:
sudo sh -c "ulimit -n 102400 && exec su $LOGNAME"測試步驟
OLTP讀寫混合場景
進行RDS實例的讀寫混合性能測試,參考如下命令,請根據實際情況填寫數據庫,用戶,密碼,端口等信息。
1.創建測試數據庫“sbtest”
mysql -u XXX -P XXX -h XXX -p -e "create database sbtest"2.準備數據
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=80000 --tables=32 --events=0 --time=300 --threads=XXX oltp_read_write prepare3.運行測試
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=80000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run4.清理數據
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=80000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 oltp_read_write cleanup測試結果關鍵指標:QPS、TPS、響應時間(RT)。
OLTP只讀場景
1.準備數據
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=32 --events=0 --time=300 --threads=XXX oltp_read_only prepare2.運行測試
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 --skip-trx=1 --report-interval=1 oltp_read_only run3.3.3.清理數據
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 oltp_read_only cleanup測試結果關鍵指標:QPS、響應時間(RT)。
OLTP只寫場景
1.準備數據
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=32 --events=0 --time=300 --threads=XXX oltp_write_only prepare2.運行測試
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run3.清理數據
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 oltp_write_only cleanup測試結果關鍵指標:TPS、QPS、響應時間(RT)。
測試模型
表結構
CREATE TABLE `sbtest32` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k` int(11) NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_32` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=80001 DEFAULT CHARSET=utf8mb4OLTP讀寫比
Sysbench默認提交的事務中包含18條SQL語句,具體執行語句和條數如下:
表2 OLTP讀寫比例表
| SQL類型 | 比例 | SQL語句 |
|---|---|---|
| point_selects | 10 | SELECT c FROM sbtest32 WHERE id=? |
| simple_ranges | 1 | SELECT c FROM sbtest32 WHERE id BETWEEN ? AND ? |
| sum_ranges | 1 | SELECT SUM(k) FROM sbtest32 WHERE id BETWEEN ? AND ? |
| order_ranges | 1 | SELECT c FROM sbtest32 WHERE id BETWEEN ? AND ? ORDER BY c |
| distinct_ranges | 1 | SELECT DISTINCT c FROM sbtest32 WHERE id BETWEEN ? AND ? ORDER BY c |
| index_updates | 1 | UPDATE sbtest32 SET k=k+1 WHERE id=? |
| non_index_updates | 1 | UPDATE sbtest32 SET c=? WHERE id=? |
| deletes | 1 | DELETE FROM sbtest32 WHERE id=? |
| inserts_ignore | 1 | INSERT IGNORE INTO sbtest32 (id, k, c, pad) VALUES (?, ?, ?, ?) |
測試結果
關系數據庫MySQL版的性能測試結果請參見: