Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

sysbench

1. Sysbench 是什么?

Sysbench 是一个跨平台、模块化、多线程性能测试工具,主要用于对以下子系统进行压测:

  • 🔸 CPU
  • 🔸 内存 Memory
  • 🔸 磁盘 I/O
  • 🔸 数据库(MySQL、PostgreSQL、MariaDB)
  • 🔸 线程调度
  • 🔸 Mutex(锁)

它特别适合用于 数据库性能基准测试。

2. 安装 Sysbench

CentOS / AlmaLinux / Rocky

yum install -y epel-release
yum install -y sysbench

Ubuntu / Debian

apt install -y sysbench

源码(更高版本)

git clone https://github.com/akopytov/sysbench.git
cd sysbench
./autogen.sh
./configure
make -j
sudo make install

3. Sysbench 常用测试项

3.1 CPU 压测

测试 CPU 在计算质数过程中的能力。

sysbench cpu --cpu-max-prime=20000 run

关键参数:

  • –threads=N 线程数
  • –cpu-max-prime=N 质数上限

3.2 内存压测

写测试:

sysbench memory --memory-total-size=10G run

读测试:

sysbench memory --memory-total-size=10G --memory-oper=read run

3.3 磁盘 IO 测试(最常用)

创建测试文件

sysbench fileio --file-total-size=10G prepare

随机读写

sysbench fileio --file-total-size=10G --file-test-mode=rndrw run

清理

sysbench fileio cleanup

3.4 线程调度测试

sysbench threads --threads=50 run

3.5 Mutex(锁性能)

sysbench mutex --threads=50 run

4. 数据库压测(重头戏!)

Sysbench 默认内置 Lua 脚本用于 MySQL/PostgreSQL。

数据库连接参数通用写法:

--mysql-host=127.0.0.1
--mysql-port=3306
--mysql-user=root
--mysql-password=123456
--mysql-db=test

PostgreSQL:

--pgsql-host=127.0.0.1
--pgsql-port=5432
--pgsql-user=postgres
--pgsql-password=123456
--pgsql-db=test

4.1 数据准备(Prepare)

以 OLTP 读写(混合负载)为例:

MySQL:

sysbench /usr/share/sysbench/oltp_read_write.lua \
  --tables=10 \
  --table-size=1000000 \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=root \
  --mysql-password=123456 \
  --mysql-db=test \
  prepare

PostgreSQL:

sysbench /usr/share/sysbench/oltp_read_write.lua \
  --tables=10 \
  --table-size=1000000 \
  --pgsql-host=127.0.0.1 \
  --pgsql-port=5432 \
  --pgsql-user=postgres \
  --pgsql-password=123456 \
  --pgsql-db=test \
  prepare

4.2 开始压测

OLTP 混合读写

sysbench /usr/share/sysbench/oltp_read_write.lua \
  --threads=64 \
  --time=60 \
  --report-interval=10 \
  --tables=10 \
  --table-size=1000000 \
  run

OLTP 纯读

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=64 --time=60 run

OLTP 纯写

sysbench /usr/share/sysbench/oltp_write_only.lua --threads=64 --time=60 run

自定义 QPS 限制

--rate=3000

4.3 清理数据

sysbench /usr/share/sysbench/oltp_read_write.lua --tables=10 cleanup

5. 输出结果如何看?

Sysbench 输出重点字段:

TPS(transactions per second)

事务吞吐量,是最重要指标。

QPS(queries per second)

Ops/sec(读+写查询总数)。

Latency 平均延迟

平均请求延时。

95th percentile latency

P95 延迟(最重要)。

Errors / Warnings

业务错误。

数据库压测中 TPS 和 P95 延迟 是最核心指标。

6. Sysbench 最佳实践

⭐ 6.1 要按照“冷热负载”分别压测

  • 🔥 热数据(完全在内存中) – 用于测试 CPU + buffer pool
  • ❄ 冷数据(远超内存) – 用于测试磁盘随机 IO

例如服务器 16GB 内存:

  • 热测试:table-size 100 万
  • 冷测试:table-size 1000 万 * 10 tables = 1 亿

⭐ 6.2 注意线程数渐进增加

建议测试线程:

1, 2, 4, 8, 16, 32, 64, 128

用于观察系统 TPS 随线程变化是否:

  • 线性增长(优)
  • 瓶颈点(CPU 或 IO 满载)
  • 出现抖动(数据库锁争用)

⭐ 6.3 注意关闭 CPU 睿频 Turbo Boost

否则压测不稳定:

echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

⭐ 6.4 SSD IO 压测要关闭缓存

sysbench fileio ... --file-extra-flags=direct

否则结果虚高。

⭐ 6.5 PostgreSQL 请设置合适的参数

例如:

shared_buffers = 4GB
wal_buffers = 256MB
max_wal_size = 8GB
checkpoint_timeout = 15min

否则性能差距巨大。

7. 常用测试脚本模板(你可直接复制用)

PostgreSQL OLTP 混合脚本(最常用)

DB_ARGS="--pgsql-host=127.0.0.1 \
         --pgsql-port=5432 \
         --pgsql-user=postgres \
         --pgsql-password=123456 \
         --pgsql-db=test"

sysbench oltp_read_write.lua \
  --tables=10 \
  --table-size=1000000 \
  $DB_ARGS prepare

sysbench oltp_read_write.lua \
  --threads=64 \
  --time=60 \
  --report-interval=10 \
  $DB_ARGS run

sysbench oltp_read_write.lua \
  $DB_ARGS cleanup