摘要
数据库性能基准测试是评估系统能力上限、支撑容量规划和选型决策的核心手段。本文介绍 TPC-C、TPC-H、YCSB 三大主流测试标准,以及 TiDB 的基准测试实践方法、环境配置要求和结果解读注意事项。
本文适合谁:数据库架构师、运维工程师、技术选型决策者,以及需要对 TiDB 进行性能评估的团队。
一、基准测试的目的与价值
基准测试并非简单的"跑分",其核心价值在于:
| 目的 | 说明 |
|---|---|
| 能力评估 | 量化系统在特定负载下的吞吐量和延迟特征 |
| 容量规划 | 为硬件采购和集群规模提供数据依据 |
| 版本对比 | 评估新版本或新配置的性能变化 |
| 选型决策 | 在多个数据库方案之间做出数据驱动的选择 |
| 回归验证 | 升级或调优后的性能回归检测 |
关键原则:基准测试关注的是系统能力上限(Capacity),而非单次查询的响应时间(Latency)。测试结果应在可控、可重复的环境下获取。
二、主流测试标准
2.1 TPC-C:OLTP 吞吐量基准
TPC-C 由事务处理性能委员会(TPC)制定,模拟电商订单处理场景。
核心事务类型:
| 事务 | 权重 | 描述 |
|---|---|---|
| New Order | 45% | 创建新订单(读写混合) |
| Payment | 43% | 更新账户余额(读写混合) |
| Order Status | 4% | 查询订单状态(只读) |
| Delivery | 4% | 更新发货信息(写密集) |
| Stock Level | 4% | 查询库存(只读) |
核心指标:tpmC(每分钟事务数),是 TPC-C 性能的度量单位。
数据规模:以 Warehouse 数量定义,每个 Warehouse 包含 10 个 Terminal,最小测试规模为 1 Warehouse(约 100MB),生产级测试通常从 100 Warehouse 起。
2.2 TPC-H:OLAP 分析基准
TPC-H 模拟商业智能与分析查询场景,包含 22 条标准 SQL 查询。
核心指标:
- QphH@Size:每小时查询数(综合考虑 Power 和 Throughput)
- Size:数据规模因子(SF=1 约 1GB,SF=100 约 100GB)
查询特征:涵盖单表扫描、多表 Join、聚合、排序、子查询等 OLAP 典型操作。
2.3 YCSB:NoSQL/KV 测试基准
YCSB(Yahoo! Cloud Serving Benchmark)由 Yahoo 开发,专注键值存储和文档数据库测试。
| 操作类型 | 说明 |
|---|---|
| Read | 读取单条记录 |
| Update | 更新单条记录 |
| Insert | 插入新记录 |
| Scan | 范围扫描 |
| Read-Modify-Write | 读取后修改写入 |
核心优势:可自定义读写比例和操作分布(均匀/Zipfian/最新),灵活模拟不同业务负载。
三、TiDB 基准测试方法
3.1 使用 sysbench 测试 OLTP 性能
sysbench 是 TiDB OLTP 测试的首选工具。
安装与准备:
# 安装 sysbench(推荐 1.0+ 版本)
git clone https://github.com/akopytov/sysbench.git
cd sysbench && ./autogen.sh && ./configure && make -j
# 准备测试数据(10 张表,每张 1000 万行)
sysbench oltp_point_select \
--threads=16 \
--time=300 \
--db-driver=mysql \
--mysql-host=<tidb-ip> \
--mysql-port=4000 \
--mysql-user=root \
--db-ps-mode=disable \
--tables=10 \
--table-size=10000000 \
prepare
运行测试:
# Point Select(点查询)
sysbench oltp_point_select \
--threads=256 \
--time=600 \
--report-interval=10 \
--db-driver=mysql \
--mysql-host=<tidb-ip> \
--mysql-port=4000 \
--mysql-user=root \
--db-ps-mode=disable \
--tables=10 \
--table-size=10000000 \
run
# Read Only(只读混合查询)
sysbench oltp_read_only \
--threads=256 \
--time=600 \
--report-interval=10 \
run
# Read Write(读写混合查询)
sysbench oltp_read_write \
--threads=256 \
--time=600 \
--report-interval=10 \
run
# Write Only(纯写入)
sysbench oltp_write_only \
--threads=256 \
--time=600 \
--report-interval=10 \
run
3.2 使用 OLTPBench 运行 TPC-C
# 克隆并编译 OLTPBench
git clone https://github.com/oltpbenchmark/oltpbench.git
cd oltpbench && ant
# 运行 TPC-C 测试
./run_oltpbench.sh \
-b tpcc \
-c config/sample_tpcc_config.xml \
-d mysql \
-o <output-file> \
-s 5 \
-w 10 \
-t 10 \
-u root \
-p "" \
--ms=mysql \
--extra-opts tidb_enable_async_commit=true
TPC-C 配置要点(`sample_tpcc_config.xml`):
<terminals>
<terminal name="Terminal-0" type="TPCCTerminal"
warehouseCount="100" weight="1">
</terminal>
</terminals>
3.3 使用 ch-benchmark 混合负载
ch-benchmark 是 TiDB 官方推荐的混合负载测试工具,同时包含 OLTP 和 OLAP 查询:
# 安装
go get github.com/pingcap/ch-benchmark
# 准备数据
ch-benchmark -db-driver mysql -mysql-host <tidb-ip> -mysql-port 4000 \
-mysql-user root -warehouses 100 prepare
# 运行测试
ch-benchmark -db-driver mysql -mysql-host <tidb-ip> -mysql-port 4000 \
-mysql-user root -warehouses 100 -threads 128 -time 600m run
四、测试环境配置要求
4.1 硬件要求
| 角色 | 最低配置 | 推荐配置 |
|---|---|---|
| TiDB | 8C 16GB | 16C 32GB × 2 |
| TiKV | 16C 32GB SSD | 32C 64GB NVMe × 3+ |
| PD | 4C 8GB SSD | 8C 16GB SSD × 3 |
| TiFlash(可选) | 16C 64GB SSD | 32C 128GB NVMe × 2 |
4.2 网络要求
- 最低 10Gbps 内网带宽
- 同机房部署,避免跨机房网络延迟干扰
4.3 关键配置优化
-- TiDB 配置
SET GLOBAL tidb_max_txn_size = 104857600; -- 100MB 事务限制
SET GLOBAL tidb_executor_concurrency = 8; -- 并发度调优
-- TiKV 配置(tikv.toml)
[raftstore]
raftstore-max-raft-log-count = 2048
[rocksdb]
max-open-files = 4096
[readpool]
unified-read-pool-size = 8
五、结果解读与注意事项
5.1 关键指标解读
| 指标 | 含义 | 关注点 |
|---|---|---|
| QPS/TPS | 每秒查询/事务数 | 吞吐量上限 |
| 95th/99th Percentile | 延迟分布尾部 | 长尾延迟是否可接受 |
| P50 延迟 | 中位数延迟 | 典型用户体验 |
| CPU 利用率 | 各节点 CPU 占用 | 瓶颈定位 |
| IOPS / 磁盘吞吐 | 存储压力 | 是否接近硬件上限 |
5.2 常见陷阱
- 忽略预热期:首次运行会触发冷启动,至少跑两轮取第二轮数据
- 客户端瓶颈:客户端线程数不足或 CPU 饱和会导致测不准
- 缓存干扰:测试前需清空 buffer pool(`sysbench --warmup-time=0`)
- 连接池不足:确保连接数 > 客户端线程数
- 数据分布偏差:生产数据分布与基准测试的均匀分布差异大
FAQ
Q1:TPC-C 的 tpmC 指标如何换算为实际业务 QPS? tpmC 是加权事务数,实际换算需要根据业务 SQL 复杂度估算。一般来说,简单 CRUD 的实际 QPS 约为 tpmC 的 2-5 倍,复杂事务则低于 tpmC。
Q2:TiDB 的 HTAP 能力如何测试? 推荐使用 ch-benchmark,它同时包含 OLTP 事务和 OLAP 查询,并可在 TiDB + TiFlash 架构下直接运行,无需切换测试工具。
Q3:基准测试结果能直接用于生产容量规划吗? 需要打折。基准测试是理想化场景,生产环境的查询复杂度、数据分布、网络抖动等因素会导致实际性能下降 20%-40%。建议在基准结果基础上留出充足余量。
Q4:如何避免基准测试中的"刷榜"嫌疑? 采用可复现的测试方法、完整披露测试环境配置、多次运行取平均值、使用行业标准工具,避免定制化"优化"测试。
总结
数据库基准测试是一项需要严谨态度的工程活动。选择合适的测试标准(TPC-C/TPC-H/YCSB)、搭建规范的测试环境、使用正确的配置参数、科学解读测试结果,是获得可信数据的关键。对于 TiDB 用户,推荐使用 sysbench + ch-benchmark 的组合,覆盖 OLTP 和 HTAP 场景。
下一步行动
- 下载 TiDB 基准测试工具:TiDB Benchmark Suite — 官方测试工具集
- 获取免费 POC 测试:TiDB 免费试用 — 在真实负载下验证性能
- 参考官方基准数据:TiDB 性能白皮书 — 获取权威基准测试报告