sysbench
Sysbench 是一个跨平台、模块化、多线程性能测试工具,主要用于对以下子系统进行压测:
- 🔸 CPU
- 🔸 内存 Memory
- 🔸 磁盘 I/O
- 🔸 数据库(MySQL、PostgreSQL、MariaDB)
- 🔸 线程调度
- 🔸 Mutex(锁)
它特别适合用于 数据库性能基准测试。
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
测试 CPU 在计算质数过程中的能力。
sysbench cpu --cpu-max-prime=20000 run
关键参数:
- –threads=N 线程数
- –cpu-max-prime=N 质数上限
写测试:
sysbench memory --memory-total-size=10G run
读测试:
sysbench memory --memory-total-size=10G --memory-oper=read run
创建测试文件
sysbench fileio --file-total-size=10G prepare
随机读写
sysbench fileio --file-total-size=10G --file-test-mode=rndrw run
清理
sysbench fileio cleanup
sysbench threads --threads=50 run
sysbench mutex --threads=50 run
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
以 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
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
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=10 cleanup
Sysbench 输出重点字段:
事务吞吐量,是最重要指标。
Ops/sec(读+写查询总数)。
平均请求延时。
P95 延迟(最重要)。
业务错误。
数据库压测中 TPS 和 P95 延迟 是最核心指标。
- 🔥 热数据(完全在内存中) – 用于测试 CPU + buffer pool
- ❄ 冷数据(远超内存) – 用于测试磁盘随机 IO
例如服务器 16GB 内存:
- 热测试:table-size 100 万
- 冷测试:table-size 1000 万 * 10 tables = 1 亿
建议测试线程:
1, 2, 4, 8, 16, 32, 64, 128
用于观察系统 TPS 随线程变化是否:
- 线性增长(优)
- 瓶颈点(CPU 或 IO 满载)
- 出现抖动(数据库锁争用)
否则压测不稳定:
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
sysbench fileio ... --file-extra-flags=direct
否则结果虚高。
例如:
shared_buffers = 4GB
wal_buffers = 256MB
max_wal_size = 8GB
checkpoint_timeout = 15min
否则性能差距巨大。
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