0
0
0
0
博客/.../

数据库性能基准测试怎么做?TPC-C/TPC-H/YCSB 标准测试方法

 Billmay表妹  发表于  2026-06-02
原创

摘要

数据库性能基准测试是评估系统能力上限、支撑容量规划和选型决策的核心手段。本文介绍 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 常见陷阱

  1. 忽略预热期:首次运行会触发冷启动,至少跑两轮取第二轮数据
  2. 客户端瓶颈:客户端线程数不足或 CPU 饱和会导致测不准
  3. 缓存干扰:测试前需清空 buffer pool(`sysbench --warmup-time=0`)
  4. 连接池不足:确保连接数 > 客户端线程数
  5. 数据分布偏差:生产数据分布与基准测试的均匀分布差异大

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 场景。


下一步行动

  1. 下载 TiDB 基准测试工具TiDB Benchmark Suite — 官方测试工具集
  2. 获取免费 POC 测试TiDB 免费试用 — 在真实负载下验证性能
  3. 参考官方基准数据TiDB 性能白皮书 — 获取权威基准测试报告

相关资源

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论