sysbench命令报“command not found”主因是path未包含可执行文件路径,需用find /usr -name "sysbench"定位(常见于/usr/local/bin/sysbench),再检查并更新path或配置软链;prepare报“unknown database 'sbtest'”因库未手动创建且用户缺建库权限。

sysbench命令报“command not found”怎么快速定位
不是没装,是根本找不到可执行文件。先用 find /usr -name "sysbench" 2>/dev/null 搜一遍,常见路径是 /usr/local/bin/sysbench 或 /usr/bin/sysbench。如果找到了但命令不可用,说明 $PATH 没包含该路径:
• Ubuntu/Debian:确认是否启用了 universe 源,再跑 sudo apt install sysbench
• CentOS/RHEL 8+:必须先 sudo dnf install epel-release,再 dnf install sysbench
• 源码安装后:检查 ./configure --prefix=/usr/local 是否执行,然后确认 /usr/local/bin 在 $PATH 中,或直接用绝对路径调用 /usr/local/bin/sysbench
prepare阶段报“Unknown database 'sbtest'”必须手动建库
sysbench 不会自动创建数据库,它只操作表。这个错误和权限无关,纯粹是库不存在。必须提前登录 MySQL 执行:
• CREATE DATABASE sbtest CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
• 用户授权要完整:CREATE USER 'sbuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';(MySQL 8.0+ 必须显式指定认证插件)
• GRANT ALL ON sbtest.* TO 'sbuser'@'localhost'; FLUSH PRIVILEGES;
注意:--mysql-db=sbtest 和 --mysql-user=sbuser 参数必须显式传入,不能依赖默认值
prepare卡住或生成极慢:别让单线程硬扛100万行
默认 --table-size=1000000 是单线程插入,I/O 和事务开销拉满。实操上要改三个关键点:
• 加并发:--threads=8(按 CPU 核数设,别盲目堆高)
• 缩小单表规模:--table-size=100000 + --tables=4(小表多张比大表一张更容易预热)
• 关 autocommit:--mysql-autocommit=off,配合 MySQL 侧临时调低 innodb_flush_log_at_trx_commit=2 和 sync_binlog=0(仅测试环境!压完必须还原)
run阶段QPS上不去,processlist里全是“Waiting for table metadata lock”
这是老版本 sysbench(如 1.0.20 之前)在 prepare 后立刻 run 导致的 DDL/DML 冲突。本质是脚本悄悄重建索引,锁住了元数据。解决办法很直接:
• 升级到 sysbench ≥ 1.0.20
• 压测前加 --db-driver=mysql 显式指定驱动,避免误走 pgsql 分支
• 观察 show processlist,若大量线程卡在 Waiting for table metadata lock,立即中止并检查版本和脚本路径
• 别用 --rate=0,设上限如 --rate=1000,否则瞬间冲高后连接池崩掉
真正影响结果可信度的,从来不是峰值 QPS 数字,而是 95th percentile latency 和 reconnects 是否为 0;哪怕 TPS 很高,只要 99th 超过 500ms,对真实业务就是不可接受的尾部延迟。











