对于个人站长来说,评估公有云虚拟机或VPS的性能,尤其是数据库性能,是网站稳定运行的关键。sysbench是一个流行的开源基准测试工具,能够模拟高并发下的数据库操作(OLTP),帮助我们判断当前MySQL/MariaDB配置是否合理,以及硬件性能瓶颈在哪里。
本文将手把手教你如何利用sysbench进行一次标准的数据库读写压力测试。
步骤一:安装 sysbench
首先,确保你的VPS上已经安装了sysbench。主流的Linux发行版可以直接通过包管理器安装。
Ubuntu/Debian 系统:
sudo apt update
sudo apt install sysbench -y
CentOS/RHEL 系统:
如果EPEL仓库已配置,可以直接安装。
sudo yum install sysbench -y
步骤二:准备 MySQL/MariaDB 数据库环境
我们需要为测试创建一个专门的数据库和用户,以避免污染生产数据。
登录到MySQL/MariaDB命令行,执行以下SQL:
CREATE DATABASE sbtest;
CREATE USER 'sbuser'@'localhost' IDENTIFIED BY 'YourSecurePassword';
GRANT ALL PRIVILEGES ON sbtest.* TO 'sbuser'@'localhost';
FLUSH PRIVILEGES;
注意: 请将 YourSecurePassword 替换为实际的密码。
步骤三:准备测试数据 (Prepare Phase)
在执行实际压测之前,我们需要让sysbench在sbtest数据库中生成测试数据。我们以16张表,每张表10万行数据为例进行准备。
以下命令定义了连接参数、测试模式(oltp_read_write)、表大小和数量,并执行 prepare 操作。
sysbench oltp_read_write \
--db-driver=mysql \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sbuser \
--mysql-password=YourSecurePassword \
--mysql-db=sbtest \
--table-size=100000 \
--tables=16 \
--threads=4 \
prepare
- –table-size=100000: 每张表包含10万行数据。
- –tables=16: 创建16张表 (sbtest1, sbtest2, …)。
- –threads=4: 使用4个并发线程来插入数据。
步骤四:执行压测 (Run Phase)
数据准备完成后,我们开始运行OLTP读写混合测试。本次测试我们将模拟32个并发连接,持续运行60秒,每5秒输出一次报告。
sysbench oltp_read_write \
--db-driver=mysql \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sbuser \
--mysql-password=YourSecurePassword \
--mysql-db=sbtest \
--time=60 \
--threads=32 \
--report-interval=5 \
run
结果解读关键指标:
压测结束后,你需要重点关注以下几行输出:
- transactions: 总共完成的事务数。
- tps (transactions per second): 每秒完成的事务数。这是衡量数据库性能最重要的指标(越高越好)。
- latency (95th percentile): 95%的请求的延迟时间。这个值越低,表示数据库响应越稳定、越快。
一个典型的输出片段如下:
SQL statistics:
queries performed:
read: 182312
write: 65115
other: 26046
total: 273473
transactions:
executed: 13023 (217.03 per sec.)
latency:
min: 1.32ms
avg: 7.23ms
max: 65.11ms
95th percentile: 15.55ms
response time:
min: 1.32ms
avg: 7.23ms
max: 65.11ms
95th percentile: 15.55ms
步骤五:清理测试数据 (Cleanup Phase)
测试完成后,使用cleanup命令删除sbtest数据库中所有sysbench生成的表。
sysbench oltp_read_write \
--db-driver=mysql \
--mysql-db=sbtest \
cleanup
通过反复调整 –threads 参数,你可以观察数据库性能随并发量增加的变化趋势,从而找到VPS或数据库配置的最佳平衡点。
汤不热吧