安装
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
在/usr/share/sysbench下有这些脚本:
- bulk_insert.lua:批量插入数据测试,评估数据库在高并发批量插入数据时的性能
- oltp_delete.lua:删除操作测试,评估数据库在高并发删除数据时的性能
- oltp_point_select.lua:主键查询测试,评估数据库在高并发主键查询时的性能
- oltp_read_write.lua:读写混合操作测试,评估数据库在高并发读写操作时的性能
- oltp_update_non_index.lua:非索引字段更新测试,评估数据库在高并发更新非索引字段时的性能
- select_random_points.lua:随机点查询测试,评估数据库在高并发随机点查询时的性能
- oltp_common.lua:公共函数库,包含了其他OLTP脚本常用的函数
- oltp_insert.lua:插入操作测试,评估数据库在高并发插入数据时的性能
- oltp_read_only.lua:只读操作测试,评估数据库在高并发只读操作时的性能
- oltp_update_index.lua:索引字段更新测试,评估数据库在高并发更新索引字段时的性能
- oltp_write_only.lua:只写操作测试,评估数据库在高并发写入数据时的性能
- select_random_ranges.lua:随机范围查询测试,评估数据库在高并发随机范围查询时的性能
准备测试数据
mysqladmin create test_db
sysbench /usr/share/sysbench/oltp_insert.lua --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password="" --mysql-db=test_db --tables=10 --table-size=100000 prepare
插入操作测试
sysbench /usr/share/sysbench/oltp_insert.lua --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password="" --mysql-db=test_db --tables=10 --table-size=100000 --threads=4 --time=60 --report-interval=10 run
参数解释:
- sysbench /usr/share/sysbench/oltp_insert.lua:指定使用 Sysbench 的 OLTP 插入测试脚本 oltp_insert.lua
- –db-driver=mysql:指定数据库驱动为 MySQL
- –mysql-host=localhost:指定 MySQL 数据库的主机地址为 localhost
- –mysql-port=3306:指定 MySQL 数据库的端口号为 3306
- –mysql-user=root:指定 MySQL 数据库的用户名为 root
- –mysql-password=“”:指定 MySQL 数据库的密码为空
- –mysql-db=test_db:指定要测试的 MySQL 数据库名称为 test_db
- –tables=10:指定测试中使用的表数量为 10
- –table-size=100000:指定每个表的行数为 100000
- –threads=4:指定测试中使用的线程数为 4
- –time=60:指定测试运行时间为 60 秒
- –report-interval=10:指定每 10 秒报告一次中间结果
- run:执行测试
输出结果:
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)
Running the test with following options:
Number of threads: 4
Report intermediate results every 10 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
[ 10s ] thds: 4 tps: 1673.05 qps: 1673.05 (r/w/o: 0.00/1673.05/0.00) lat (ms,95%): 4.25 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 1860.85 qps: 1860.85 (r/w/o: 0.00/1860.85/0.00) lat (ms,95%): 3.68 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 4 tps: 1805.21 qps: 1805.21 (r/w/o: 0.00/1805.21/0.00) lat (ms,95%): 3.55 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 4 tps: 1825.60 qps: 1825.60 (r/w/o: 0.00/1825.60/0.00) lat (ms,95%): 3.43 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 4 tps: 1927.85 qps: 1927.85 (r/w/o: 0.00/1927.85/0.00) lat (ms,95%): 3.36 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 4 tps: 1946.93 qps: 1946.93 (r/w/o: 0.00/1946.93/0.00) lat (ms,95%): 3.43 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 0
write: 110402
other: 0
total: 110402
transactions: 110402 (1839.86 per sec.)
queries: 110402 (1839.86 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.0039s
total number of events: 110402
Latency (ms):
min: 0.78
avg: 2.17
max: 252.15
95th percentile: 3.62
sum: 239789.79
Threads fairness:
events (avg/stddev): 27600.5000/36.36
execution time (avg/stddev): 59.9474/0.00
关注指标
- TPS (Transactions Per Second): 每秒事务处理量。报告中显示TPS在1673.05到1946.93之间波动,平均为1839.86。这表示数据库在高负载下仍能保持高效的处理能力
- QPS (Queries Per Second): 每秒查询率,由于这是插入操作测试,QPS与TPS相同
- avg:平均响应时间2.17毫秒
- min:最小响应时间0.78毫秒
- max:最大响应时间252.15毫秒
- 95th percentile:3.62毫秒,意味着95%的事务响应时间都在3.62毫秒以内
- tNumber of threads:线程数4
- events (avg/stddev):每个线程的事件数(平均/标准差)27600.5 / 36.36
- 平均:每个线程平均处理的事件数
- 标准差:反映了各线程处理事件数的离散程度。标准差越小,说明各线程处理的事件数越接近平均值
- execution time (avg/stddev):每个线程的执行时间(平均/标准差)59.9474 / 0.00
- 平均:每个线程的平均执行时间
- 标准差:表示执行时间的标准差,说明各线程的执行时间几乎没有差异
- Errors (错误率): 每秒错误数,确保测试过程中没有错误
- Reconnections (重连次数): 每秒重连数,确保连接的稳定性
删除测试数据
sysbench /usr/share/sysbench/oltp_insert.lua --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password="" --mysql-db=test_db --tables=10 --table-size=100000 cleanup