TPC-C 是模擬線上交易處理 (OLTP) 的國際標準基準,Percona 實作的 tpcc-mysql 能更真實反映生產負載。本文記錄從編譯、建表、載入、壓測到結果分析的完整過程。
| 工具 | 特點 | 適用場景 |
|---|---|---|
| sysbench | 輕量、OLTP 簡化、CPU/IO/記憶體綜合測試 | 快速基線、參數調優對比、CI/CD 整合 |
| tpcc-mysql | 完整 TPC-C 規範、複雜業務邏輯、多表關聯 | 生產負載模擬、架構驗證、容量規劃 |
| mysqlslap | MySQL 內建、單表並發 | 簡單並發壓測 |
# 依賴
sudo apt-get install bzr build-essential libmysqlclient-dev
# 或 CentOS
yum install bzr gcc mysql-devel
# 下載源碼
bzr branch lp:~percona-dev/perconatools/tpcc-mysql
cd tpcc-mysql/src
make
# 生成 tpcc_load、tpcc_start 兩個執行檔
export MYSQL_HOME=/usr/local/mysql
export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MYSQL_HOME/include:$C_INCLUDE_PATH
export PATH=$MYSQL_HOME/bin:$PATH
mysql -u root -p -e "CREATE DATABASE tpcc;"
mysql -u root -p tpcc < create_table.sql
mysql -u root -p tpcc < add_fkey_idx.sql
9 張核心表:warehouse、district、customer、history、new_orders、orders、order_line、item、stock。
./tpcc_load 127.0.0.1 tpcc root password 1
# 參數:host db user pass warehouse_count
# 1 warehouse ≈ 100MB 資料,建議 ≥ CPU 核心數
./tpcc_start \
-h 127.0.0.1 -P 3306 \
-d tpcc -u root -p password \
-w 4 -c 32 \
-r 30 -l 300 \
-i 10 -f result.log \
-t truncate.log > console.log
| 參數 | 含義 | 建議 |
|---|---|---|
| -w | Warehouse 數量 | ≥ CPU 核心數,避免熱點 |
| -c | 並發連線數 | 2-4× CPU 核心 |
| -r | 預熱時間(秒) | 30-60s,填充 Buffer Pool |
| -l | 測試持續時間(秒) | ≥ 300s,穩態觀測 |
| -i | 報告間隔(秒) | 10-30s |
MEASURING START.
1, 42(0):4.115|4.310, 40(0):0.968|0.992, 4(0):0.326|0.332, 3(0):3.784|5.406, 3(0):10.934|10.943
格式:秒數, 成功(超時):P90延遲|最大延遲
42(0):4.115|4.310 → New-Order:42 成功、0 超時、P90 4.1ms、最大 4.3ms
[0] sc:378 lt:0 rt:0 fl:0 -- New-Order
[1] sc:374 lt:0 rt:0 fl:0 -- Payment
[2] sc:37 lt:0 rt:0 fl:0 -- Order-Status
[3] sc:36 lt:0 rt:0 fl:0 -- Delivery
[4] sc:38 lt:0 rt:0 fl:0 -- Stock-Level
in 10 sec.
(all must be [OK])
Payment: 43.34% (>=43.0%) [OK]
Order-Status: 4.29% (>=4.0%) [OK]
Delivery: 4.17% (>=4.0%) [OK]
Stock-Level: 4.40% (>=4.0%) [OK]
Response Time (90% passed): All [OK]
2268.000 TpmC
| 指標 | 含義 | 健康標準 |
|---|---|---|
| TpmC | 每分鐘交易數 (Transactions per minute-C) | 越高越好,核心吞吐指標 |
| sc (success) | 成功交易數 | 佔比符合 TPC-C 規範分佈 |
| lt (timeout) | 超時交易數 | 應為 0 或極低 |
| P90 延遲 | 90% 交易完成時間 | < 10ms (OLTP 典型) |
| Constraint Check | 交易混合比例、響應時間合規性 | 全 [OK] 才算有效測試 |
innodb_buffer_pool_size、innodb_io_capacity、innodb_log_file_size、CPU 綁核innodb_thread_concurrencyinnodb_lock_wait_timeout、死鎖頻率、長事務sync_binlog 影響壓測同步收集:
# 系統層
iostat -x 1, vmstat 1, mpstat -P ALL 1, sar -n DEV 1
# MySQL 層
mysqladmin -i 1 ext | grep -E 'Innodb_|Qcache_|Threads_|Handler_'
# 或使用 Prometheus + Grafana + mysqld_exporter
TPC-C 測試能暴露 sysbench 無法發現的鎖競爭、死鎖、長事務、複雜 JOIN 效能等真實生產問題,是上線前必做的驗證環節。