数据库压测
使用sysbench、mysqlslap对数据库进行性能测试
sysbench
github官网:https://github.com/akopytov/sysbench。
可以对mysql、postgresql进行性能测试。
安装
- mac:
brew install sysbench
- ubuntu:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
命令
- 创建数据库:
sbtest
- 准备数据库:
sysbench --db-driver=mysql --mysql-host=<数据库主机> --mysql-user=<数据库用户名> --mysql-password=<数据库密码> --mysql-db=<测试数据库名> --mysql-storage-engine=innodb prepare
- 测试:
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run
- 删除数据库:
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 oltp_write_only cleanup
测试结果
测试结果样例:
[ 61s ] thds: 10 tps: 36.18 qps: 735.67 (r/w/o: 514.57/148.74/72.36) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
指标解读:
thds: 10
:测试中使用的线程数,这里是 10 个线程。tps: 36.18
:每秒钟的事务数(Transactions Per Second)。这表示在测试期间,平均每秒执行了大约 36.18 个数据库事务。qps: 735.67
:每秒的查询数(Queries Per Second)。这表示在测试期间,平均每秒执行了大约 735.67 个数据库查询。(r/w/o: 514.57/148.74/72.36)
:这是事务类型的分布统计。在括号中,r
表示读取(read)、w
表示写入(write)、o
表示其他(other)类型的事务。具体来说,测试期间平均每秒执行了大约 514.57 个读取事务、148.74 个写入事务和 72.36 个其他类型的事务。lat (ms,95%): 0.00
:这是查询响应时间的统计数据。lat
表示延迟(latency),(ms,95%)
表示以毫秒(ms)为单位的延迟,95% 表示在 95% 的查询中,延迟不超过多少毫秒。在这里,延迟为 0.00 毫秒,意味着大多数查询的响应时间非常快。err/s: 0.00
:每秒的错误数。在测试期间,平均每秒发生了 0.00 个错误。reconn/s: 0.00
:每秒的重新连接数。在测试期间,平均每秒发生了 0.00 次重新连接。
mysqlslap
mysql的自带工具
命令
mysqlslap -uroot -pxphone123 -a
,-a是–auto-generate-sql 作用是自动生成测试SQLmysqlslap -uroot -pxphone123 -a --concurrency=100 --number-of-queries=1000
–concurrency=100 指定同时有100个客户端连接 –number-of-queries=1000 指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数)mysqlslap -uroot -pxphone123 -a --concurrency=100 --number-of-queries=1000 --number-int-cols=5 --number-char-cols=20
–number-int-cols=5 指定生成5个int类型的列 –number-char-cols=20 指定生成20个char类型的列mysqlslap -uroot -pxphone123 --concurrency=10 --create-schema=test1 --query="select * from student;"
,可以指定自己的数据库和查询语句mysqlslap -uroot -pxphone123 --concurrency=10 --create-schema=test1 --query="select_query.sql" --delimiter=";"
select_query.sql是自己写的sql文件,–delimiter是sql文件里面的分割符