Sysbench性能测试
传送门:
Sysbench性能测试(一): sysbench简介与安装
Sysbench性能测试(二): sysbench基本使用和CPU性能测试
Sysbench性能测试(三): 内存性能测试
Sysbench性能测试(四): 文件I/O性能测试
Sysbench性能测试(五): 数据库性能测试
3-5 数据库性能测试
对数据库的性能测试将使用sysbench自带lua脚本,该脚本存放于*/usr/local/share/sysbench/*。测试过程同I/O性能测试,分成准备、运行、清理三个阶段,且测试所需数据库需要提前创建。此外,MySQL的参数进行改动:max_prepared_stmt_count=100000、max_connections=16384、
sysbench自带的数据库性能测试脚本有::
- oltp_read_only.lua 只读操作测试
- oltp_read_write.lua 读写操作测试
- oltp_write_only.lua 只写操作测试
- oltp_insert.lua INSERT语句测试
- oltp_delete.lua DELETE测试
- oltp_point_select.lua 点查语句测试
- oltp_update_index.lua 更新索引字段操作测试
- oltp_update_non_index.lua 更新无索引字段操作测试
- select_random_points.lua 随机点查脚本
- bulk_insert.lua 批量插入测试 ,多线程并发执行insert,每个线程都插入到各自的表中。每个线程执行的INSERT数量由time或者events限制。
- select_random_ranges.lua 这个测试是为测试MariaDB的MyISAM的key_cache_segments而设计的,并且应该与其他存储引擎一起工作。
测试能获得的测量指标
- TPS:Transactions Per Seconds 每秒事务数
- QPS:Queries Per Seconds 每秒查询率
- 产生错误数/s、错误总数
- 所有events的最小、最大、平均耗时
- 所有线程耗时总和
- 平均每线程完成events数/标准差
- 平均每线程耗时/标准差
数据库性能测试参数:
mysql options:
--mysql-host=[LIST,...] # MySQL server host. [localhost]
--mysql-port=[LIST,...] # MySQL server port. [3306]
--mysql-socket=[LIST,...] # MySQL socket.
--mysql-user=STRING # MySQL user. [sbtest]
--mysql-password=STRING # MySQL password. []
--mysql-db=STRING # MySQL database name. [sbtest]
--mysql-ssl[=on|off] # 如果客户端库中可用,使用SSL连接. [off]
--mysql-ssl-cipher=STRING # 为SSL连接使用特定的密码. []
--mysql-compression[=on|off] # 如果客户端库中可用,使用压缩. [off]
--mysql-debug[=on|off] # 跟踪所有客户端库调用. [off]
--mysql-ignore-errors=[LIST,...] # 要忽略的错误列表,或者为“all”. [1213,1020,1205]
--mysql-dry-run[=on|off] # 演练.假设所有MySQL客户端API调用都是成功的,并不实际执行. [off]
测试实例
# 线程数=400
# 已提前在mysql创建数据库obliviate,测试准备阶段将在该数据库生成10个表,每个表大小为1000
# 每隔3s输出一次中间结果,测试时间限制在60s
# 准备阶段:
sysbench --test=/usr/local/share/sysbench/oltp_write_only.lua --mysql-host=host --mysql-port=3306 --mysql-user=root --mysql-password=password --mysql-db=obliviate --report-interval=3 --time=60 --threads=400 --tables=10 --table-size=1000 prepare
# 运行阶段:
sysbench --test=/usr/local/share/sysbench/oltp_write_only.lua --mysql-host=host --mysql-port=3306 --mysql-user=root --mysql-password=host --mysql-db=obliviate --report-interval=3 --time=60 --threads=400 --tables=10 --table-size=1000 run
# 清理阶段:
sysbench --test=/usr/local/share/sysbench/oltp_write_only.lua --mysql-host=host --mysql-port=3306 --mysql-user=root --mysql-password=password --mysql-db=obliviate --report-interval=3 --time=60 --threads=400 --tables=10 --table-size=1000 cleanup
# host地址和密码请换成自己的
测试结果
Running the test with following options:
Number of threads: 400
Report intermediate results every 3 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
# TPS:Transactions Per Seconds
# QPS:Queries Per Seconds
[ 3s ] thds: 400 tps: 607.53 qps: 3895.84 (r/w/o: 0.00/2527.16/1368.68) lat (ms,95%): 1258.08 err/s: 22.04 reconn/s: 0.00
[ 6s ] thds: 400 tps: 527.35 qps: 3216.11 (r/w/o: 0.00/2143.07/1073.04) lat (ms,95%): 1708.63 err/s: 18.33 reconn/s: 0.00
[ 9s ] thds: 400 tps: 524.32 qps: 3182.27 (r/w/o: 0.00/2117.96/1064.31) lat (ms,95%): 1903.57 err/s: 15.67 reconn/s: 0.00
... # 中间结果部分删除
[ 54s ] thds: 400 tps: 497.33 qps: 3049.99 (r/w/o: 0.00/2034.33/1015.66) lat (ms,95%): 2009.23 err/s: 21.00 reconn/s: 0.00
[ 57s ] thds: 400 tps: 583.88 qps: 3551.23 (r/w/o: 0.00/2365.82/1185.41) lat (ms,95%): 1771.29 err/s: 17.99 reconn/s: 0.00
[ 60s ] thds: 400 tps: 563.34 qps: 3421.70 (r/w/o: 0.00/2275.36/1146.35) lat (ms,95%): 1708.63 err/s: 22.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 0 # 读请求
write: 133663 # 写请求
other: 67041 # 其他
total: 200704 # 总和
transactions: 32965 (533.62 per sec.) # 事务总数
queries: 200704 (3248.86 per sec.) # 查询总数
ignored errors: 1111 (17.98 per sec.) # 被忽略的错误数
reconnects: 0 (0.00 per sec.) # 重连
General statistics:
total time: 61.7728s # 测试时间
total number of events: 32965 # events总数
Latency (ms):
min: 3.53 # 最小耗时
avg: 736.72 # 平均耗时
max: 5302.82 # 最大耗时
95th percentile: 1836.24 # 95%events耗时范围
sum: 24285971.83 # 所有线程总耗时
Threads fairness:
events (avg/stddev): 82.4125/6.53 # 平均每线程完成events数/标准差
execution time (avg/stddev): 60.7149/0.49 # 平均每线程执行时间/标准差