Gopher360:三步实现游戏手柄控制电脑的终极指南
2026/5/23 21:08:24
你想全面了解如何使用 sysbench 对 MySQL 进行压测,包括安装、常用压测场景、参数配置和结果解读,我会从基础到实战一步步给你讲清楚。
sysbench 是一款开源的、跨平台的多线程性能测试工具,支持对 CPU、内存、磁盘 I/O、数据库(主要是 MySQL)等进行压测,尤其在数据库压测中应用广泛,能模拟真实的读写负载,评估数据库的性能极限。
环境说明:以 Linux(CentOS 7/8 或 Ubuntu)为例,推荐安装 1.0 及以上版本(新版语法更清晰)。
# CentOS/RHELyuminstall-y epel-release yuminstall-y sysbench# Ubuntu/Debianaptupdateaptinstall-y sysbench# 安装依赖yuminstall-ymakeautomake libtool pkgconfig libaio-devel mysql-community-develgit# 克隆源码gitclone https://github.com/akopytov/sysbench.gitcdsysbench# 编译安装./autogen.sh ./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysqlmake-j$(nproc)makeinstall# 验证安装sysbench --versionsysbench 压测 MySQL 分为 3 个核心步骤:准备测试数据→执行压测→清理测试数据。
先熟悉常用的连接和压测参数,后续所有场景都会用到:
| 参数 | 说明 |
|---|---|
--mysql-host | MySQL 服务器地址(默认 127.0.0.1) |
--mysql-port | MySQL 端口(默认 3306) |
--mysql-user | 连接 MySQL 的用户名 |
--mysql-password | 连接 MySQL 的密码 |
--mysql-db | 测试用的数据库名(需提前创建) |
--table-size | 每个测试表的行数(核心参数,决定数据量) |
--tables | 测试表的数量 |
--threads | 并发线程数(模拟并发用户数) |
--time | 压测持续时间(秒,默认 10) |
--report-interval | 每隔几秒输出一次压测进度(秒) |
-- 1. 创建测试数据库CREATEDATABASEIFNOTEXISTSsysbench_test;-- 2. 创建有足够权限的用户(避免用 root 压测)CREATEUSER'sysbench'@'%'IDENTIFIEDBY'Sysbench@123';GRANTALLPRIVILEGESONsysbench_test.*TO'sysbench'@'%';FLUSHPRIVILEGES;sysbench 对 MySQL 的压测主要有 4 个核心场景:只读(oltp_read_only)、只写(oltp_write_only)、读写混合(oltp_read_write)、纯插入(oltp_insert),以下以最常用的「读写混合」为例讲解完整流程。
sysbench oltp_read_write\--mysql-host=127.0.0.1\--mysql-port=3306\--mysql-user=sysbench\--mysql-password=Sysbench@123\--mysql-db=sysbench_test\--table-size=1000000\# 每个表 100 万行--tables=10\# 共 10 个表(总数据量 1000 万行)--db-driver=mysql\prepare# 准备数据的核心指令sysbench_test库中创建 10 张名为sbtest1~sbtest10的测试表;table-size=100000,高配服务器(8C16G)可设table-size=5000000。sysbench oltp_read_write\--mysql-host=127.0.0.1\--mysql-port=3306\--mysql-user=sysbench\--mysql-password=Sysbench@123\--mysql-db=sysbench_test\--table-size=1000000\--tables=10\--threads=64\# 64 并发线程(根据 CPU 核心数调整,一般为 CPU 核心数的 2 倍)--time=60\# 压测持续 60 秒--report-interval=10\# 每 10 秒输出一次进度--db-driver=mysql\run# 执行压测的核心指令sysbench oltp_read_write\--mysql-host=127.0.0.1\--mysql-port=3306\--mysql-user=sysbench\--mysql-password=Sysbench@123\--mysql-db=sysbench_test\--tables=10\--db-driver=mysql\cleanup# 清理数据的核心指令oltp_read_write替换为oltp_read_only;oltp_write_only;oltp_insert;oltp_delete或oltp_update_index。压测结束后会输出详细结果,重点关注以下核心指标(以读写混合压测为例):
SQL statistics: queries performed: read: 103200 # 读请求总数 write: 29486 # 写请求总数 other: 14743 # 其他请求(如事务提交) total: 147429 # 总请求数 transactions: 7371 (122.83 per sec.) # 核心:TPS(每秒事务数) queries: 147429 (2456.60 per sec.) # QPS(每秒查询数) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 60.0010s # 实际压测时长 total number of events: 7371 # 总事务数 total time taken by event execution: 3836.1251s # 所有线程执行事件的总耗时 response time: min: 19.02ms # 事务最小响应时间 avg: 520.43ms # 事务平均响应时间 max: 2980.15ms # 事务最大响应时间 95th percentile: 1200.50ms # 95%事务的响应时间(重点关注)innodb_buffer_pool_size、max_connections、innodb_flush_log_at_trx_commit);top、iostat、vmstat监控服务器 CPU、磁盘 IO、内存使用,定位性能瓶颈(如 IO 打满则需优化磁盘,CPU 打满则需优化 SQL 或数据库参数)。table-size(单表行数)、tables(表数量)、threads(并发数);